🍳머리말
go get명령어와 go mod download의 차이는 무엇일까요?
📕 mod file
📔 module이란
https://go.dev/doc/modules/gomod-ref
go lang에서 하나의 file은 package라고 표현합니다. 이 go package들의 종속성을 관리하는 system을 module이라고 합니다. go application을 구동하는데 필요한 package들의 정보들이 존재합니다. 이를 관리하기 위해 주로 새로운 module을 만든다는 의미에서 go mod init 명령어를 사용합니다.
📔 mod init
어떤 folder 내에 다음 명령어를 입력하면 새로운 project를 생성할 수 있습니다.
go mod init [원하는 module path]
제 경우는 다음 명령어를 입력했습니다.
go mod init example/mymodule
이렇게 새로운 project를 생성했음을 보여줍니다.
이후 그 속성을 정의하는 file인 go.mod를 볼 수 있습니다. 내용은 이렇습니다.
module example/mymodule //module과 module path
go 1.18 //project 구동에 필요한 최소 go version
📕 go get
📔 설명
go get명령은 다음처럼 사용합니다.
go get [필요 package의 web 경로]
이 명령어는 go.mod file 내용을 이 go application이 구동하는데 필요한 module들을 요구사항에 따라 갱신하기 위해 사용하는 명령어입니다. 또한 이러한 필요 사항이 일관성이 있는지 확인하고 필요에 따라 새 요구 사항을 추가하여 명령줄에서 이름을 지정한 필요 package에서 가져온 모든 package가 요구 사항의 일부 module에서 제공되도록 합니다.
다음 명령어로 logr package를 가져와 봅니다.
go get "github.com/go-logr/logr"
go.mod file의 내용이 다음처럼 변경된 것을 확인할 수 있습니다.
version을 명시하지 않아도 go 1.18에 맞는 v1.2.3을 받은 것을 확인할 수 있습니다.
또 다른 module을 받아봅니다.
go get "github.com/prometheus-operator/prometheus-operator"
mod file이 갱신되었음을 확인할 수 있습니다.
요구 사항 갱신 및 추가의 부작용으로 go get은 명명된 package(및 해당 종속성)를 포함하는 module을 local module cache에 download합니다.
📕go mod download
📔 설명
https://go.dev/ref/mod#go-mod-download
대조적으로 go mod download는 새로운 요구 사항을 추가하거나 기존 요구 사항을 갱신하지 않습니다. 특정 module version을 명시해 사용하는 경우 이 version만 download합니다. 이는 go mod file을 일관되도록 유지하는데 도움이 됩니다.
📔 예시
다음 명령어로 v0.58.0인 prometheus-operator에서 v.0.57.0도 받아봅니다
go mod download github.com/prometheus-operator/prometheus-operator@v0.57.0
엇? 별다른 반응이 없습니다.
mod file도 그대롭니다.
local cache에 저장되 있어서 안보이는 것입니다.
다음 경로로 들어가 줍니다.
cd $GOPATH/pkg/mod/github.com/prometheus-operator
window의 경우 이렇게 저장이 되어 있습니다. 이로써 code 작성시 쉽게 import해서 application을 작성, build 및 실행이 가능합니다.
📕참조
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Go' 카테고리의 다른 글
(Go error) - missing go.sum entry for module providing package <package_name> (0) | 2022.08.23 |
---|---|
(Go) - Window에 go 설치 및 환경설정 (0) | 2022.08.19 |
(client-go Error) - "but does not contain package k8s.io/api/auditregistration/v1alpha1" (0) | 2022.08.12 |
(Go) - Marshal, Unmarshal 함수 (0) | 2022.05.10 |
(Go) - test하기 (0) | 2022.05.03 |