Skip to content

Instantly share code, notes, and snippets.

@vkgtaro
Last active February 18, 2017 14:48
Show Gist options
  • Save vkgtaro/243ee4095db8d38069f62422042a475b to your computer and use it in GitHub Desktop.
Save vkgtaro/243ee4095db8d38069f62422042a475b to your computer and use it in GitHub Desktop.
go のライブラリ探索パスについて

参考: 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

ディレクトリ名とファイル名違ってても読めた。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment