ソースコードから理解する技術-UnderSourceCode

手を動かす(プログラムを組む)ことで技術を理解するブログ

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パッケージ内でのテストの実行をすることができました。