参考: http://cuto.unirita.co.jp/gostudy/post/go-package/
/Users/vkgtaro/hoge
├─ main.go
└─ src
└─ model
├─ model.go <= import "model"
└─ user
└─ user.go <= import "model/user"
/Users/vkgtaro/hoge がプロジェクトルート。 環境変数 GOPATH に設定する。
export GOPATH=/Users/vkgtaro/hoge
これで import "model" は src/model/model.go を探しに行く サブモジュールは import "model/user" で src/model/user/user.go を探しに行く
/Users/vkgtaro/hoge
├─ main.go
└─ src
└─ model
├─ model.go
└─ user.go
上記のパターンで import "model" すると次のエラーがおきる
main.go:4:5: found packages model (model.go) and user (user.go) in /Users/vkgtaro/Desktop/hoge/src/model
かといって import "model/model" と指定しても無理
main.go:4:5: cannot find package "model/model" in any of:
/usr/local/go/src/model/model (from $GOROOT)
/Users/vkgtaro/Desktop/hoge/src/model/model (from $GOPATH)
ディレクトリとファイル名そろえた階層作らないと使えない気がする
import での相対 path 指定は GOPATH を指定しなくても main.go からの相対で探索させるのに使うっぽいが、
恐らく今日引っかからなかったのは model/model.go とか model/user/user.go とか直上のディレクトリ名の問題な気がします!
同じディレクトリ以下にある go スクリプトは package をそろえれば使えた。と言うか参考 URL がまんま答えでした。
/Users/vkgtaro/hoge
├─ main.go
└─ src
└─ model
└─ user.go
ディレクトリ名とファイル名違ってても読めた。