最近ちょこちょこ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)) }