Go 버전 범프 확인하기
go.mod의 go 라인을 올리면 언어 버전 이상의 변화가 발생합니다. 각 메인 패키지는 새 버전의 GODEBUG 기본값을 받으므로, net/http, crypto/tls, crypto/x509, net/url, runtime 등의 동작이 코드 변경 없이 바뀔 수 있습니다. 번들된 도구는 설치된 Go 도구 체인에 어떤 기본값이 변경되는지, 그리고 어떤 바이너리가 영향을 받는 패키지를 임포트하는지 질의합니다. 이 도구는 Go가 설치되어 있어야 하며, go.mod를 수정하지 않고 읽기만 하고, 사용자의 코드를 빌드하거나 실행하지 않으며, 네트워크를 사용하지 않습니다.
도구 실행
모듈 루트에서 실행하거나 디렉터리를 전달합니다:
go run "${CLAUDE_PLUGIN_ROOT}/scripts/godebugdiff.go" --to 1.24 .
--to는 설치된 도구 체인의 버전을 기본값으로 사용하며, 그보다 최신 버전일 수 없습니다. 사용자가 더 새로운 대상 버전을 원한다면, 해당 Go 버전을 먼저 설치해야 한다고 알려주세요.--from은 현재go라인을 기본값으로 사용합니다. 이미 버전이 올라간 PR을 리뷰하는 경우 베이스 브랜치의 버전을 전달하세요:--from 1.21.--json을 추가하면 구조화된 출력을 얻을 수 있고,--tests를 추가하면 테스트 바이너리를 포함시킬 수 있습니다. main 패키지가 없는 모듈은 자동으로 테스트 바이너리를 통해 검사됩니다.- 모듈이 모듈 캐시에 없다고 표시되면,
go mod download를 실행하기 전에 사용자에게 물어보세요. 네트워크를 사용하기 때문입니다.
바이너리에 도달하는 각 변경 사항 확인
도구는 설정을 해당 설정을 읽는 패키지별로 나열합니다. 패키지를 임포트한다고 해서 변경된 코드 경로가 실제로 사용된다는 의미는 아니므로, 다음을 확인하세요:
- 각 설정에 대한 문서 문장과 링크를 읽으세요. 그런 다음 코드에서 해당 설정이 명명한 API를 검색하세요. 예를 들어
httpmuxgo121의 경우http.NewServeMux와HandleFunc패턴, TLS 설정의 경우tls.Config, x509 설정의 경우x509.ParseCertificate또는CreateCertificate,randseednop의 경우rand.Seed를 찾습니다. - 각 설정에 대해 코드가 해당 경로를 사용하는지 여부를 말하세요: 사용됨, 사용되지 않음, 또는 알 수 없음(예: 의존성이 호출하는 경우).
containermaxprocs나updatemaxprocs같은runtime설정은 모든 바이너리에 적용됩니다. CPU 제한이 있는 컨테이너처럼 배포 방식과 관련된 설정을 지적하세요.win으로 시작하는 설정은 Windows에서만 중요합니다. 프로젝트가 Windows에 배포되지 않는 경우 그렇게 말하세요.- "go 명령어 변경" 아래의 설정은 프로그램 자체가 아니라
go test -json또는 CI의 빌드에 영향을 줍니다.
보고서
- 간단한 표: 설정, 변경 내용, 영향을 받는 바이너리, 코드가 해당 경로를 사용하는지 여부.
- 새 기본값을 받아들이거나 이전 값을 고정(pin)할 것을 권장하세요. 코드가 실제로 의존하는 설정에 대해서만 고정을 제안하고, 도구의
godebug ( ... )블록을 사용하세요. 고정은 임시적이어야 한다고 말하고, 이후 Go 릴리스에서 제거된다고 설명하세요. - 도구의 참고 사항(예: Go 1.22 루프 변수 변경, 또는 라이브러리의 go 라인이 이를 임포트하는 프로그램의 GODEBUG를 설정하지 않는다는 점)을 전달하세요.
하지 말아야 할 것
- 사용자가 요청하지 않으면 go.mod를 편집하지 마세요.
- 아무것도 나열되지 않았다고 해서 버전 범프가 안전하다고 말하지 마세요. 이 도구는 GODEBUG 기본값만 다룹니다. 릴리스 노트에는 다른 변경 사항이 나열되어 있습니다.
- 사용자가 요청하지 않으면 동작을 확인하기 위해 사용자의 테스트나 바이너리를 실행하지 마세요.