내 Go 버전을 대신 선택하지 마세요

발행: (2026년 3월 29일 AM 07:15 GMT+9)
5 분 소요

Source: Hacker News

Background

go.mod 파일에는 필수 go 지시문이 포함됩니다.
Go 1.21부터는 이 지시문에 전체 패치 번호(1.21.0 대신 1.21)를 포함하도록 변경되었습니다. 이 변경을 잘못 사용하기 시작한 프로젝트가 늘어나면서 모두에게 문제가 되고 있습니다.

버전은 프로젝트를 컴파일할 수 있는 최소 버전입니다.
이는 여러분이 프로젝트를 컴파일할 때 사용하는 버전이 아니라, 누구든지 여러분의 프로젝트를 컴파일할 수 있는 최소 버전이라는 뜻입니다.

이것은 전염성이 있습니다: go.mod 파일에 넣은 버전은 여러분을 의존하는 모든 프로젝트가 설정할 최소 버전이 됩니다.

즉, 1.25.7과 같은 버전을 넣으면, 여러분을 직접 혹은 간접적으로 가져오는 모든 사람은 자신의 프로젝트를 컴파일하려면 반드시 Go 1.25.7 이상을 사용해야 한다는 것을 의미합니다.

FAQ

최신 버전을 사용하도록 라이브러리 이용자를 강제하는 것이 좋은가요?

여러분의 라이브러리를 전이적으로 가져오는 사용자가 최신 Go 버전을 사용하도록 보장하는 것은 여러분의 책임이 아닙니다.
그 결정을 대신 내려서는 안 됩니다.

하지만 빌드에서는 최신 버전을 사용하고 싶어요!

GitHub Actions의 actions/setup-go 같은 도구는 때때로 go.mod 파일의 go 지시문을 실제 사용할 Go 버전을 결정하는 데 사용합니다.

이는 잘못된 사용이며, 그렇게 하면 안 됩니다. 꼭 사용해야 한다면 toolchain 지시문을 사용하세요(actions/setup-go에서 지원) 혹은 다른 메커니즘으로 버전을 선택하면 됩니다.

Go가 기본/권장하는 것이 아니었나요?

go mod init을 실행하면 Go가 최신 버전을 기본값으로 넣습니다. 왜 그런지는 잘 모르겠습니다. 직접 낮은 버전으로 바꾸는 것은 문제없이 동작합니다.

문서에서는 이것이 최소 버전이라고 명시하고 있으므로, 의도는 여러분이 사용하는 버전이 아니라 최소 버전을 지정하는 것입니다.
최신 버전이 기본값으로 설정되는 것은 사람들이 바꿔야 할 잘못된 기본값일 뿐입니다.

내 패키지는 정말 최신 패치 릴리스에 의존합니다!

패키지 코드가 특정 패치 릴리스에서만 올바르게 동작한다 하더라도, 다른 버전으로도 컴파일이 가능하다면 go 지시문에 그 버전을 넣는 것은 여전히 잘못된 선택입니다.

go 지시문은 매우 전염성이 강해 여러분의 패키지를 가져오는 모든 사람에게 영향을 미칩니다. 실제로 여러분의 코드를 사용하지 않더라도 말이죠.

0 조회
Back to Blog

관련 글

더 보기 »

지난 몇 달 동안 Go 학습

첫 몇 주: Your Wall 찾기: Beginner Frustration Channels를 Reinforcement Tool로 활용하기 막혔나요? 여기 아직도 나를 당황하게 하는 것들 Pointers는 M에게 거짓말을 하지 않는다.

손상된 Git 저장소 복구 방법

손상된 Git 저장소 복구 git status가 fatal: bad object HEAD error: objec... 와 같은 메시지를 반환할 때 느껴지는 특별한 두려움이 있다.