go get 은 1.17 이후로 바이너리 설치에 사용되지 않을 것이고,
1.18 에서는 사용이 불가능할 것이다.
1.16 이상을 사용하는 경우는 go install @latest 를 사용해야 한다.
GOPATH
초기 go 는 package manager 없었고,
go get 이 모든 소스들을 fetch 하고 $GOPATH/src 에 저장하였다.
여기서 버전은 따로 없었고, master branch 만이 package 의 안정버전을 의미했다.
Go Modules
Go Modules 는 go 1.11 에 처음 소개되었다.
모든 package 의 git checkout 저장을 위해 GOPATH 를 사용하는 것 대신에
Go Modules 는 tag된 버전을 go.mod 를 통해 추적했다.
(go.mod 파일에 사용 된 각각의 패키지 버전을 명시)
이 이후로, GOPATH 와 GO Modules 간 상호작용이 go 의 가장 큰 문제중 하나가 되었다.
GO111MODULE
go 가 package 들을 어떻게 import 할지 결정하는 환경 변수
그런데 이 값은 go version 에 따라서 그 의미가 변한다.
이 환경변수의 값은 on, off, auto 중 하나가 사용된다.
### Go 1.11 ~ 1.12
on
- Project가 GOPATH 에 있어도, Go modules 사용을 강제한다.
- 그래서, go.mod 파일이 있어야 한다.
off
- GOPATH 밖에 있어도, GOPATH 방식으로 동작한다.
auto
- default mode
- GOPATH 밖에 있는 경우, on 형태로 동작
- go.mod 가 존재하더라도 GOPATH 안에 있는 경우, off 형태로 동작
### Go 1.13
default mode 의 변화가 존재
- go.mod 가 존재하거나, go.mod 가 존재하지 않더라도 GOPATH 밖에 있으면, on 형태로 동작
- GOPATH 내에서 go.mod 가 없으면 off 형태로 동작
### Go 1.14 ~ 1.15(?)
1.13 과 같은 동작 방식이지만,
GO111MODULE 과 무관한 동작에서 약간의 차이가 존재
### Go 1.16
1.16 부터, default 방식이 on 으로 바뀌었고,
예전 GOPATH 방식을 유지하길 원한다면, GO111MODULE 값을 off 로 변경해야 함.
하지만 좋은 소식은 go tool 설치를 위한 전용 명령어가 있다는 것.
go install golang.org/x/tools/gopls@latest
go get 과 go install 간 약간의 차이가 존재한다.
### Go 1.17
GO111MODULE=auto 는 GO111MODULE=on 과 동일
예전 GOPATH 방식을 유지하길 원한다면, GO111MODULE 값을 off 로 변경해야 함.
여기서는 GO111MODULE 를 어떻게 사용 할지 영향을 주는 3가지 중요한 변경점이 존재
- Faster downloading of dependencies if you are using Git to fetch modules
- Installing binaries with GO111MODULE=on go get is deprecated
- go run knows about @version
- If you were running the binary from a go.mod enabled project, you could specify the version of the binary you want to run in your go.mod and then run go run -mod=mod.
[결론]
GO111MODULE=on 은 git tags 에 근거하여 내가 특정 버전을 선택 할 수 있게 해주고,
=> 최신 버전을 명시하고 싶을 경우 @latest
GO111MODULE=off 는 master 로 부터 최신 commit 을 fetch 하게 해준다.
[99. ref]
https://maelvls.dev/go111module-everywhere/
'Go' 카테고리의 다른 글
go heap container (0) | 2022.09.08 |
---|---|
go mod (0) | 2022.08.10 |
go 패키지 설치, 관리 (0) | 2022.08.10 |
ubuntu go version update (0) | 2022.04.06 |
cgo (0) | 2022.03.19 |