본문 바로가기

Go

(Go) - go get과 go mod download 차이

반응형

🍳머리말

go get명령어와 go mod download의 차이는 무엇일까요?


📕 mod file

📔 module이란

https://go.dev/doc/modules/gomod-ref

 

go.mod file reference - The Go Programming Language

go.mod file reference Each Go module is defined by a go.mod file that describes the module’s properties, including its dependencies on other modules and on versions of Go. These properties include: The current module’s module path. This should be a loc

go.dev

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

📔 설명

https://go.dev/ref/mod#go-get

 

Go Modules Reference - The Go Programming Language

 

go.dev

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 Modules Reference - The Go Programming Language

 

go.dev

대조적으로 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 및 실행이 가능합니다.

 


📕참조

https://stackoverflow.com/questions/66356034/what-is-the-difference-between-go-get-command-and-go-mod-download-command

 

What is the difference between go get command and go mod download command

I'm trying to get a good understanding of Go modules and am a bit puzzled by the difference between the go get command and the go mod download command. "The go get command updates module

stackoverflow.com


*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.