Go는 버전이 오르면서 dependeny 관리 기능에도 꾸준히 향상이 있어왔습니다.
1.18 beta가 나온 현재시점에서 사용하게 되는 go mod 명령을 쓰기좋게 정리합니다.
go mod
go는 mod라는 툴을 사용해 dependency 관리를 자동화합니다.
GOPATH가 아닌곳에서 go build를 수행하려면 mod를 만들어야 합니다.
go mod init {MODULE} 을 입력하여 모듈을 생성하고
외부 라이브러리인 경우 go get을 통해 해당 dependency를 로컬에 다운로드합니다.
이후, go mod tidy를 수행하면 go.mod 파일이 위치한 해당 디렉터리에 Dependency들을 설정합니다.
이게 일반적인 사용 형식이고,
go 코드 모듈 생성
go mod init {MODULE_PATH}
go mod init example/mymodule
- dependency 추적을 위한 go module을 생성
- 일반적으로 아래와 같이 모듈 경로 설정
- <prefix>/<descriptive-text>
Module Path 모듈 경로
- dependency를 추적할 수 있는 모듈 위치/이름
- 겹치지 않아야함
- 보통 회사, 작성자, 소유자 등의 출처 포함
- Go tool이 모듈 소스코드를 찾을 수 있는 repository 위치(모듈을 publishing할 경우 필수!!)
- github 같은 저장소 이름을 사용하지 않는 경우, 겹치지 않을만한 prefix를 선택
- descriptive-text는 프로젝트 이름을 선택하는 것이 일반적
- module path는 패키지에 대한 namspace
To add all dependencies for a package in your module, run a command like the one below ("." refers to the package in the current directory):
- $ go get .
To add a specific dependency, specify its module path as an argument to the command.
- $ go get example.com/theirmodule
To get a specific numbered version, append the module path with an @ sign followed by the version you want:
- $ go get example.com/theirmodule@v1.3.4
To get the latest version, append the module path with @latest:
- $ go get example.com/theirmodule@latest
To get the module at a specific commit, append the form @commithash:
- $ go get example.com/theirmodule@4cf76c2
To get the module at a specific branch, append the form @branchname:
- $ go get example.com/theirmodule@bugfixes
전체 갱신
- go get -u
특정 패키지 갱신
- go get -u github.com/go-xmlfmt/xmlfmt
생성된 비어있는 go.mod를 코드와 동기화
- go mod tidy
go mod 는 caching을 사용하기 때문에
한번 정해진 dependency를 변경하고 싶은 경우 아래 명령어를 사용하자
- go clean -modcache
자세한 내용은 아래에서 참고하면 되겠습니다.
'Programming > Go' 카테고리의 다른 글
Go/Golang이 느려지는 이유와 성능 향상 (2) | 2023.06.12 |
---|---|
Go/Golang - Visualizing Concurrency (0) | 2021.12.21 |
Go/Golang for sets: map[T]struct{} vs. map[T]bool (0) | 2021.11.29 |
[ko]Wire-Jacket: IoC Container of google/wire for cloud-native (0) | 2021.10.07 |
Go/Golang Release & pkg.go.dev package update (0) | 2021.10.06 |