Go Modules時代のimport
最近ちょこちょこGolangを勉強していて、1.13になってデフォルトONになるgo modulesを使った時にimportをどうやるのかわからなくて困ったのでメモ
tl;dr
go.mod
のmodule
項目とwikiを見て
gopath mode
go modulesじゃない時はGOPATHがあったのでimport
の時は$GOPATH/src
が見えないけどついてるイメージでプロジェクトがgithub.com/yuzu441/nogi
なのであれば
import "github.com/yuzu441/nogi/package"
と書けば指定したパッケージがimportできる
module-aware mode
go modulesを使う設定にするとGOPATHがないのでパッケージ名の指定をどうするのかがわからなかったが、githubのwikiを見ていると答えが書いてあった
go modules環境ではgo.mod
というファイルがあって
これを生成するのにgo mod init
というコマンドを使うんだけど、これの後ろにgithub.com/yuzu441/nogi
のように指定してやる
go mod init github.com/yuzu441/nogi
するとgo.mod
ファイルの先頭にmodule github.com/yuzu441/nogi
のように記述されgopathモードの時と同じようにパッケージを参照できる
なので以下のように実行すると
go mod init yuzu441/nogi
yuzu441/nogi
でアクセスできる
import "yuzu441/nogi/package"
のように参照することができる
サンプルコード
go mod init yuzu441/sample
でgo.mod
を生成したという仮定でのサンプル
// service/calc.go package service func Add(x int, y int) int { return x + y } // main.go package main import ( "strconv" "yuzu441/sample/service" ) func main() { result := service.Add(1, 2) println("add result: " + strconv.Itoa(result)) }