Understanding go.mod and go.sum

2022. 7. 15. 17:08TIL💡/GoLang

GoLang을 익히고 Go 프로젝트를 보기 시작하니 프로젝트 구조를 익히는 것 또한 중요하다고 생각이 들었다.

 

go.mod

go.mod 파일은 GoLang의 의존성관리의 핵심이다. 필요하거나 사용되는 모든 모듈들은 go.mod 파일에서 유지된다.

우리는 import하거나 사용하는 모든 패키지들을 위해 이러한 모듈들을 위한 entry로서 만들어 놓는다.

go.mod파일을 가지면 매번 의존하는 모듈에 대한 get 명령어를 입력하는 수고를 덜 수 있다.

 

go mod init

새로운 모듈을 만들고, go.mod 파일을 초기화한다.

 

우리는 go.mod 외에도 go.sum이라는 파일도 생성한다. 이를 통해 체크섬을 유지하고 우리가 프로젝트를 다시 실행할 때 패키지들 모두 다시 설치할 필요를 없게 만든다. 대신 $GOPATH/pkg/mod 디렉토리에 있는 캐시를 사용한다.

 

go.sum은 자동 생성되는 파일이므로 수정할 필요가 없다.

 

go.mod의 내부 설명

module - version control을 위한 url을 저장한다.

go 1.14 - golang ver.

require - 우리가 프로젝트에서 사용하는 모든 의존 모듈 리스트

replace - git version이 아닌 local version of dependency 지칭

//indirect - 명시적으로 사용하지는 않고, 내부 모듈에서 사용하는 의존성

 

go mode tidy

go.mod 파일이 소스 코드와 매치되도록 보장한다.

필요하지만 잃어버린 module requirement를 추가하고, 불필요한 의존성을 제거한다.

 

우리가 특정 패키지를 go.mod에서 업그레이드하는 경우, 우리는 go.sum에서의 체크섬을 업데이트하기 위해 go mod tidy 명령어를 실행해야 한다.

 

go mod vendor

vendor directory를 생성한다.

이는 third party 의존성을 복사하여 프로젝트 루트에 vendor 파일에 붙여넣는다. 이는 transitive dependencies를 추가한다.

vendoring이 가능해지면 go 명령어는 vendor 디렉토리에 있는 패키지들을 다운로드하는 대신 cache로 load할 수 있다.

 

go clean -modcache

이 명령어는 $GOPATH/pkg/mod에 저장된 mod cache를 제거한다.

이는 설치된 패키지를 삭제하는 데 사용된다. -modcache 플래그는 소스 코드상에 pack되지 않은 모듈 캐시까지, 즉  전체 모듈을 제거한다.

'TIL💡 > GoLang' 카테고리의 다른 글

[Go] 학습 자료 정리  (0) 2022.10.05