0%

go mod 를 이용한 패키지 관리 방법

요약

go mod init 을 이용해 프로젝트 루트 경로에 go.mod 파일 생성하면 됩니다.

커멘드

1
2
3
4
5
6
7
8
9
10
11
# mod 초기화 및 go.mod 파일 생성
go mod init {package name}

# go.sum 파일 생성
go build

# 소스내 의존성을 go.mod 파일에 정리
go tidy

# go.sum 파일 유효성 검사
go mod verify

mod 파일 생성

1
2
# guide
go mod init <your-module-name>

go.mod 파일은 루트 경로에 하나만 존재하면 됩니다.
프로젝트 내 디렉토리별로 go.mod 를 만들 필요가 전혀 없습니다.

샘플

mod 생성

1
2
# module 초기화
go mod init go-simple-func

main.go

1
2
3
4
5
6
7
8
9
10
11
package main

import (
"go-simple-func/color"
)

func main() {
for _, e := range color.Colors() {
println(e)
}
}

color/color.go

1
2
3
4
5
package color

func Colors() []string {
return []string{"red", "blue"}
}

run

1
2
3
go run main.go
red
blue

외부 공개 모듈

아래 형태의 패키지 import 는 동일 프로젝트 단위에서는 유효할수 있으나 다른 프로젝트에서 사용하기는 어렵습니다.

1
2
3
import (
"go-simple-func/color"
)

따라서 공유 가능한 위치에 패키지를 올리고 해당 주소를 지정하게 된다면 어떤 go 프로젝트든지 쉽게 참조가 가능합니다.

예시

1
2
3
import (
"github.com/labstack/echo"
)

참고

go 1.13 (2020.01 현재 최신) 버전에서 보면 기본적으로 mod 를 이용한 패키지 모듈관리를 권장하고 있으므로 다른 패키지 관리자를 찾는 시간낭비를 하지 않아도 될것같습니다.

오류 사례 및 대응

import 410 Gone

해결

1
2
$ export GOSUMDB=off
$ go get -u

오류 메시지

1
2
3
4
5
6
7
8
$ go mod tidy
go: finding module for package my.domain.com/proto
go: found my.domain.com/proto in my.domain.com/proto v0.0.0-20200403070107-7aa1a88d0c5c
go: my.domain.com/pj imports
my.domain.com/proto: my.domain.com/proto@v0.0.0-20200403070107-7aa1a88d0c5c/go.mod: verifying module: my.domain.com/proto@v0.0.0-20200403070107-7aa1a88d0c5c/go.mod: reading https://sum.gol
ang.org/lookup/my.domain.com/proto@v0.0.0-20200403070107-7aa1a88d0c5c: 410 Gone
server response: not found: my.domain.com/proto@v0.0.0-20200403070107-7aa1a88d0c5c: unrecognized import path "my.domain.com/proto": https fetch: Get "https://my.domain.com/proto?go-get=1":
dial tcp 222.122.86.35:443: connect: connection refused