golang 모듈
Golang 모듈이란?
Go의 모듈 개념은 Go 어플리케이션 내의 종속성 문제를 해결하기 위해 만들어졌다.
모듈은 패키지를 트리 형식으로 저장하고 있다. 루트 트리에는 go.mod가 있다.
cf. repo(저장소), 모듈, 패키지 간의 관계 정리 repo에는 1개 이상의 Go 모듈이 포함된다. 각 모듈에는 1개 이상의 Go 패키지가 포함된다. 각 패키지에는 .go 파일이 포함된다.
1 2 3 4 5 6 7 8 9 10 11 12 repository |-- module1 | `-- package1 | `-- src1.go | `-- src2.go | `-- go.mod | `-- package2 | `-- src.go |-- module2 | `-- package | `--src.go | `-- go.mod
GO111MODULE 환경변수
Golang의 모듈 동작은 GO111MODULE
환경변수로부터 제어된다.
GO111MODULE
은 ON,OFF,AUTO(DEFAULT)로 설정할 수 있다.
- ON : 빌드 시
$GOPATH
대신 모듈의 패키지 사용 - OFF : 빌드 시
$GOPATH
패키지 사용 - AUTO : 현재 위치가
$GOPATH
외부면서, go.mod가 있으면 모듈 사용. 그 외엔$GOPATH
의 패키지를 사용
아래 명령어를 통해 변경한다
1
go env -w GO111MODULE=on
종속성 관리
go.mod란?
go.mod 파일은 Golang의 의존성 관리의 핵심이다. (관리가 잘 안되어있다면.. 개발환경 세팅에 있어서 많은 역경을 불러일으킨다..)
go.mod 파일이 만들어져 있다면, 프로젝트에 일일이 의존하는 패키지를 받아오는 go get 패키지
하는 수고를 덜 수 있다.
go.mod파일이 없는 상태라면 터미널에서 go mod init
을 통해 생성한다.
go.sum이란?
go.sum 파일은 go.mod 파일이 생성될 때 자동 생성된다.
종속성 관리를 위한 암호화된 체크섬 정보를 저장하고 있고 각각의 체크섬을 확인하여 수정된 항목이 있는지 확인하는 데 사용된다.
$GOPATH/pkg/mod
디렉토리에 있는 캐시를 사용한다.
go.mod 내부 설명
1
2
3
4
5
6
7
8
9
10
11
12
13
module Bsmg
go 1.20
require (
github.com/gorilla/sessions v1.2.2
github.com/robfig/cron/v3 v3.0.1
github.com/shinYeongHyeon/go-times v1.1.3
golang.org/x/sys v0.14.0
)
require github.com/gorilla/securecookie v1.1.2 // indirect
go.mod에는 4가지 키워드가 있다. module
, require
, replace
, exclude
module
모듈 경로를 저장한다. 예를 들어 module안에 있는 패키지를 가져오려 한다면, module에 선언되어 있는 import 경로/패키지
를 사용하면 된다.
require
require
는 반드시 필요한 종속성 정보다. 프로젝트 빌드 시 자동으로 해당 패키지를 다운로드 및 설치한다.
replace
replace
는 모듈의 버전이나 경로를 대체한다.
1
2
replace example.com/some/dependency => example.com/some/dependency v1.2.3
replace example.com/some/dependency => ../../dependency
exclude
exclude
는 특정 패키지를 제외한다.
1
exclude example.com/some/dependency
indirect
그 외에 내부 모듈에서 사용된 종속성은 indirect로 표현해준다.
명령어
1
2
3
4
5
6
7
8
9
10
11
12
go mod init
// 프로젝트의 mod 파일을 생성한다
go mod tidy
// go.mod 파일이 소스코드와 매치되도록 보장한다.
// 불필요한 의존성 제거, 추가/수정된 의존성 반영
go mod vendor
// 폐쇄망에서도 빌드할 수 있도록 의존성 패키지를 vendor 디렉토리에 다운로드한다.
go clean -modcache
// $GOPATH/pkg/mod에 저장된 캐시를 삭제한다. (설치된 패키지 제거)