はじめに
go言語でちょっとだけコード試したい時に、
任意のディレクトリに以下のような構成で実行すると cannot find package
と言われることがあります
先にやり方を書いてしまうと相対パス指定する
ことでインポートが可能となります。
構成
$ tree . ├── main.go └── sample01 └── sample01.go
コード
- main.go
package main import ( "fmt" "sample01/sample1" ) func main() { s1 := sample01.HelloWorld("hoge") fmt.Println(s1) }
- sample01/sample01.go
package sample01 func HelloWorld(s string) string { return "hello world, " + s }
実行してみる
実行するとcannot find package
と怒られます
main.go:4:2: cannot find package "sample01/sample01" in any of: /usr/local/Cellar/go/1.6.2/libexec/src/sample01/sample01 (from $GOROOT) /Users/hoge/go-test-sample/src/sample01/sample01 (from $GOPATH)
解決方法
冒頭でも書いている通り、import宣言を相対パスで書くだけです。
コード
- main.goのimport宣言だけ変更
package main import ( "fmt" "./sample01" ) func main() { s1 := sample01.HelloWorld("hoge") fmt.Println(s1) }
実行してみる
$ go run main.go hello world, hoge
補足
あくまでもちょろっと試したい時用で、相対パスでのpackage指定はお勧めされないので注意
- 毎度pkg化することになるのでコンパイルが遅い
- 他人が普通にgo getできない
おわり
てっきりgopathに追加するものだとばかり思い込んでいると
相対パスでインポートしようという頭がなかったので目からうろこでした\(^o^)/