GOPATH 내에서만 관리.
$GOPATH/src 하위 디렉토리에서만 프로젝트를 생성할 수 있었음.
Go Module이 옵션 기능으로 등장.
디렉토리가 $GOPATH에 설정한 경로 상에 위치할 경우 go.mod 파일이 있더라도 모듈 모드로 동작하지 않음.
모듈 모드를 사용하기 위해서는 GO111MODULE이라는 환경변수를 on으로 설정.
디렉토리에 go.mod 파일이 있으면 기본적으로 모듈 모드로 동작.
v1.17부터 GOPATH를 통한 의존성 관리 기능이 없어질 거라는 얘기가 있었는데, 아직 있긴 한 듯.
다만 deprecated인 건 확실한 것 같음.
여러 프로젝트를 $GOPATH 단일 경로로 관리할 경우 각 프로젝트 의존성 패키지가 섞여 관리가 힘들어짐.
Go Module을 사용할 경우 프로젝트 별로 의존성 관리를 할 수 있음.
A module is a collection of Go packages stored in a file tree with a go.mod file at its root.
최상위 디렉토리에 go.mod 파일을 만들면 해당 파일과 하위 패키지들을 포함한 모듈이 됨.
외부 모듈 경로와 버전이 go.mod 파일에 기록됨. 외부 모듈을 다시 구성해야 할 경우 해당 버전으로 모듈 다운로드.
module sample
go 1.13
require (
github.com/aliyun/aliyun-oss-go-sdk v2.0.5+incompatible
github.com/artdarek/go-unzip v0.0.0-20180315101617-33dc05190e4b
github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
github.com/extrame/ole2 v0.0.0-20160812065207-d69429661ad7 // indirect
github.com/go-sql-driver/mysql v1.5.0
github.com/go-xorm/xorm v0.7.9
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
github.com/labstack/echo v3.3.10+incompatible
github.com/pangpanglabs/echoswagger v1.1.0
github.com/pangpanglabs/goutils v0.0.0-20200116103626-3f9fcfaa29b0
github.com/sergeilem/xls v0.0.1
github.com/tealeg/xlsx v1.0.5
github.com/urfave/cli v1.22.2
golang.org/x/image v0.0.0-20200119044424-58c23975cae1
)
go.mod를 생성. path에는 해당 프로젝트의 패키지 명 입력.
path는 github에 업로드 후 모듈로 사용하게 되면 github.com/계정명/프로젝트명 의 형태로 사용하기 때문에 처음부터 이 형태로 작성하는 것을 권장.
path에 패키지 주소를 입력하여 외부 패키지를 다운 받음. 이 때 go.mod에도 함께 기록함.
$GOPATH의 경로에서 해당 프로젝트 경로로 의존성 패키지 복사.
복사한 패키지를 통해 로컬 vendor 경로의 패키지를 사용할 수 있음.(Python의 venv처럼)