v1.11 Go부터 모듈 지원이 추가되었습니다. 명령
go mod init <package name>
go build
생성하는 것입니다 go.mod
및 go.sum
패키지 의존성에 대한 발견 된 모든 버전을 포함하는 파일.
모듈에 릴리스가없는 경우 해당 모듈의 최신 커밋이 사용됩니다. 모듈에 릴리스가있는 경우 최신 릴리스가 종속성으로 선택됩니다.
그러나 때로는 아직 게시 된 릴리스에없는 기능이 필요하지만 해당 릴리스 이후에 만들어진 커밋에서 가져온 기능이 필요합니다. go.mod
모듈 릴리스가 아니라 모듈 저장소의 특정 커밋을 가리 키도록 설정하는 방법은 무엇입니까?
go.mod에서 직접 할 수있는 것 같습니다.
module /my/module
require (
...
github.com/someone/some_module v0.0.0-20181121201909-af044c0995fe
...
)
v0.0.0
마지막으로 게시 된 릴리스 태그와 일치하지 않는 위치 는 20181121201909
커밋 타임 스탬프이며 af044c0995fe
커밋 해시입니까? 그러한 정보를 직접 찾아서 입력해야합니까, 아니면 더 나은 방법이 있습니까?
답변
원하는 커밋 해시에서 ‘가져 오기’만하면됩니다.
go get github.com/someone/some_module@af044c0995fe
‘go get’은 종속성 파일 (go.mod, go.sum)을 올바르게 업데이트합니다.
추가 정보 : https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies
답변
또한 특정 커밋을 얻기 위해 사용 하는 Everton 의 답변 외에도 다음 go get github.com/someone/some_module@af044c0995fe
과 같은 브랜치 이름을 사용할 수 있습니다.
go get github.com/someone/some_module@master
go get github.com/someone/some_module@dev_branch
이러한 예제는 해당 분기에서 최신 커밋을 가져옵니다.
파일 에 .NET 과 같은 의사 버전 으로 계속 기록 go.mod
됩니다 v0.0.0-20171006230638-a6e239ea1c69
. (이는 표준 semver 주문을 기반으로 모든 버전에서 간단한 총 주문을 제공하는 데 도움이됩니다 .)
답변
나는 그것이 모든 사람을 위해 어떻게 작동하는지 얼마 동안 머리를 두 드렸고 나는 그것을 실행할 수 없습니다. 저에게는 마스터 브랜치에 전념해야했고 그때는 나만 얻을 수있었습니다.
go가 특정 브랜치, 커밋 ID 또는 태그로 작업하려면 아래 명령을 실행하여 go 모듈에 대한 플래그를 활성화해야합니다.
go env -w GO111MODULE = on
이 후 우리는 할 수 있습니다
go get repo@branchname
go get repo@tag
go get repo@commithash
답변
일시적으로 로컬 디렉토리에 대한 종속성을 대체하려는 경우 (예 : 2 개의 모듈을 동시에 작업하는 경우) 파일 replace
끝에 명령문을 추가 할 수 있습니다 go.mod
.
module example.com/mypkg
go 1.15
require (
gitlab.com/someone/a_package v0.14.2
)
replace gitlab.com/someone/a_package => ../my_forks/a_package
답변
또한 go.mod 파일의 태그 대신 latest라는 단어를 넣으면 최신 태그 인 모듈로 변경됩니다.
예를 들면 :
module /my/module
require (
...
github.com/someone/some_module latest
...
)
될 것입니다
module /my/module
require (
...
github.com/someone/some_module v2.0.39
...
)
달리기 후 go mod tidy