Go언어를 시작하고 처음으로 Github를 통해 패키지를 릴리즈를 해보았습니다. 그동안 제가 만든 코드들은 보통 집에서 돌리는 라즈베리파이 서버나 NAS 등에서 버전 관리를 하고 있었고, 공개적으로 배포라는 것을 해본 적이 없었습니다.
Go언어로 만든 코드를 릴리즈하고 github으로부터 다시 패키지를 설치하여 테스트를 해보았습니다. 아니나 다를까 처음이라 그런지 다음과 같은 오류 메시지를 보게 됩니다.
type parameter requires go1.18 or later (-lang was set to go1.16; check go.mod)
implicit function instantiation requires go1.18 or later (-lang was set to go1.16; check go.mod)
분명 저는 Go 1.18보다 나중에 나온 Go 1.21.3 버전을 쓰고 있기 때문에 엄청 당황스러웠습니다.
코드에 제네릭을 쓰는 부분이 있어서 1.18 이상을 요구하는 것은 맞는데, 왜 1.16이란 버전이 튀어나오고 오류가 나타나는가 이유를 몰라서 한참을 헤맸습니다.
결론은 Go 언어로 만든 패키지 코드를 Git으로 배포할 때 go.mod 파일도 함께 배포해야 합니다.
go.mod 파일은 다음과 같은 역할을 합니다.
- 패키지 종속성 정보 저장: go.mod 파일에는 해당 패키지가 실행되기 위해 필요한 다른 패키지들의 버전과 이름 등의 정보가 저장되어 있습니다.
- 모듈 버전 관리: go.mod 파일을 통해 사용자는 해당 패키지의 특정 버전을 설치하고 사용할 수 있습니다.
- 다른 컴퓨터에서 실행 가능성 보장: go.mod 파일을 함께 배포하면 사용자는 자신의 컴퓨터에서 해당 패키지를 올바르게 설치하고 실행할 수 있습니다.
만약 go.mod 파일을 함께 배포하지 않으면 다음과 같은 문제가 발생할 수 있습니다.
- 패키지 설치 실패: 사용자가 해당 패키지를 설치하려고 할 때, 필요한 종속성 패키지 정보가 없어 설치가 실패할 수 있습니다.
- 버전 충돌: 사용자의 컴퓨터에 이미 다른 버전의 동일한 이름의 패키지가 설치되어 있을 경우, 버전 충돌 문제가 발생하여 패키지가 제대로 작동하지 않을 수 있습니다.
- 반복적인 작업: 사용자는 매번 해당 패키지를 설치할 때마다 직접 필요한 종속성 패키지를 설치해야 하는 번거로움이 발생합니다.
따라서, Go 패키지 코드를 배포할 때는 항상 go.mod 파일을 함께 포함하도록 하여야 합니다.
누군가에게는 당연할 수 있는 것인데, 이것을 몰라서 몇 시간을 헤맸네요.