Community코딩 & 개발github.com

GillMacedo/checking-go-version-bumps

GO 버전 범프 시 GODEBUG 기본값 변경 사항을 분석하고, 영향을 받는 패키지를 가져오는 바이너리와 이전 동작을 유지하는 godebug 라인을 나열합니다.

checking-go-version-bumps란 무엇인가요?

이 스킬은 Go 모듈에서 `go` 지시문 버전을 올릴 때(예: go 1.21 → go 1.24) 변경되는 GODEBUG 동작 기본값을 식별하고, 각 영향을 받는 패키지를 어떤 바이너리가 임포트하는지, 그리고 이전 동작을 유지하는 `godebug` 지시문을 보여줍니다. Go 런타임, 네트워킹, TLS, 인증서, URL 파싱 등 여러 표준 라이브러리 패키지의 동작이 버전 업그레이드와 함께 조용히 바뀔 수 있기 때문에, 코드 변경 없이 발생하는 예상치 못한 회귀를 발견하는 데 매우 유용합니다. 사용자가 go.mod의 `go` 라인을 직접 올리거나, Dependabot/Renovate PR을 리뷰하거나, 업그레이드 후 ServeMux, TLS, x509, GOMAXPROCS 등의 동작 변화를 관찰한 경우 이 스킬을 사용할 수 있습니다. Claude Code 및 일반 Go 개발 환경에서 작동하며, Go 도구 체인을 사용하고 네트워크 접근 없이 로컬에서 분석을 수행합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GillMacedo/godebugdiff/tree/main/plugin/skills/checking-go-version-bumps

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

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를 실행하기 전에 사용자에게 물어보세요. 네트워크를 사용하기 때문입니다.

바이너리에 도달하는 각 변경 사항 확인

도구는 설정을 해당 설정을 읽는 패키지별로 나열합니다. 패키지를 임포트한다고 해서 변경된 코드 경로가 실제로 사용된다는 의미는 아니므로, 다음을 확인하세요:

  1. 각 설정에 대한 문서 문장과 링크를 읽으세요. 그런 다음 코드에서 해당 설정이 명명한 API를 검색하세요. 예를 들어 httpmuxgo121의 경우 http.NewServeMux와 HandleFunc 패턴, TLS 설정의 경우 tls.Config, x509 설정의 경우 x509.ParseCertificate 또는 CreateCertificate, randseednop의 경우 rand.Seed를 찾습니다.
  2. 각 설정에 대해 코드가 해당 경로를 사용하는지 여부를 말하세요: 사용됨, 사용되지 않음, 또는 알 수 없음(예: 의존성이 호출하는 경우).
  3. containermaxprocs나 updatemaxprocs 같은 runtime 설정은 모든 바이너리에 적용됩니다. CPU 제한이 있는 컨테이너처럼 배포 방식과 관련된 설정을 지적하세요.
  4. win으로 시작하는 설정은 Windows에서만 중요합니다. 프로젝트가 Windows에 배포되지 않는 경우 그렇게 말하세요.
  5. "go 명령어 변경" 아래의 설정은 프로그램 자체가 아니라 go test -json 또는 CI의 빌드에 영향을 줍니다.

보고서

  1. 간단한 표: 설정, 변경 내용, 영향을 받는 바이너리, 코드가 해당 경로를 사용하는지 여부.
  2. 새 기본값을 받아들이거나 이전 값을 고정(pin)할 것을 권장하세요. 코드가 실제로 의존하는 설정에 대해서만 고정을 제안하고, 도구의 godebug ( ... ) 블록을 사용하세요. 고정은 임시적이어야 한다고 말하고, 이후 Go 릴리스에서 제거된다고 설명하세요.
  3. 도구의 참고 사항(예: Go 1.22 루프 변수 변경, 또는 라이브러리의 go 라인이 이를 임포트하는 프로그램의 GODEBUG를 설정하지 않는다는 점)을 전달하세요.

하지 말아야 할 것

  • 사용자가 요청하지 않으면 go.mod를 편집하지 마세요.
  • 아무것도 나열되지 않았다고 해서 버전 범프가 안전하다고 말하지 마세요. 이 도구는 GODEBUG 기본값만 다룹니다. 릴리스 노트에는 다른 변경 사항이 나열되어 있습니다.
  • 사용자가 요청하지 않으면 동작을 확인하기 위해 사용자의 테스트나 바이너리를 실행하지 마세요.

관련 스킬