Go Moduleでローカルパッケージを作成する
Using Go Modules - The Go Blog
Go Moduleについての上記の公式サイトではhello.go、それのテストであるhello_test.goを
GOPATHの外に実装する方法について書いてあります。
ですが実際にプログラムを作るときには、ローカルに幾つかのパッケージを作ることが多いかと思います。
例えば以下のような構成です。
. ├── hello/ │ ├── hello.go │ └── hello_test.go └── main.go
上記の構成で
- hello.go、hello_test.goは公式サイトのソースのまま
- main.goからはhello.goのメソッドを呼び出す
- 「$ go mod init example.com/hello_main3」ようなgo mod init はmain.goと同階層で行う
をしたところ、ビルド時に以下のようなエラーとなりました。
build example.com/hello_main3: cannot find module for path ~
対応方法としては以下のサイトを参考にさせて頂きました。
https://pod.hatenablog.com/entry/2018/12/26/074944
結論を書けば、main.go内でhelloパッケージをimportする際に、相対パスではなく絶対パスで指定すればいいようです。
こんな感じになります。
import "example.com/hello_main3/hello"
このように書くことで、ビルドしての実行、helloパッケージ内でのテストの実行をすることができました。