기존 Go 에서는 프로젝트마다 GOPATH 를 변경하고 실행해야 하는 (미친… 무슨 설계를 이렇게 함?) 불편함이 있었다. 그러나 Go 1.11 과 1.12 부터 의존성 관리 도구인 Go Module 이 탄생했다. 이제 또라이같은 GOPATH 변경으로부터 자유로워질 수 있다.
1. 새로운 모듈 만들기
$ go mod init [패키지명]
ex)
[code]
$ go mod init kr.hacktam/hello
[/code]
디렉토리에 go.mod 와 go.sum 이 생성된다.
go.mod 는 nodejs 의 package.json 과 비슷한 개념으로 패키지 정보, go버전, 의존모듈에 대한 정보를 담고 있다.
go.sum 은 history 와 같은 역할로 변경된 내역이 해시코드로 기록되어 있으면 이 코드로 비교하여 설치 및 제거 등의 의존성 관리를 한다. (우리는 신경안써도 된다.)
2. 의존성관리
go 코드에 import 가 되어 있으면 test, run, build 시에 자동으로 설치가 되며 go.mod 도 갱신된다. 버전이 명시되어 있지 않으면 가장 최신 latest 버전이 설치된다.
1) 현재 모듈과 의존성 목록 보기
[code]
$ go list -m all
[/code]
3. 모듈설치 및 업그레이드
[code]
$ go get [모듈패키지명] // 버전 명시할때는 [모듈패키지명@v1.3.1] 과 같이 한다.
[/code]
4. 사용하지 않는 의존모듈 삭제하기
[code]
$ go mod tidy
[/code]
※ nodejs 의 node_modules 과 같이 의존파일들이 모듈디렉토리에 생기지 않고 GOPATH 에 생기는 것은 아마도 go 언어가 컴파일 언어이기 때문에 실행시에는 필요가 없어서 그런것 같다. 확실하지는 않다
5. 디렉토리 관련
src, pkg, bin 이 이제 필요없다.
/main.go
/app/router.go
이런식으로 하면 된다.
main.go 에서 router.go 를 import 할때는 아래처럼 하면 된다.
[code]
import (
myapp “[모듈패키지명]/app”
)
[/code]