Goで最近ちょっとしたテストのためのモジュール(ライブラリ、パッケージ?なんて呼べばいいのだろう?)を作成した。
完全に自分向けのライブラリであり、現在はまだ開発中の段階となっている。
これについては開発の区切りがついたタイミングで、ここかZenn辺りに書こうかなと思っている。
こちらのライブラリ(モジュール)を作成する際に色々とGoのモジュール周りで試行錯誤したので、その際のことを備忘録として書き残しておく。
Goでローカルで作成しているモジュールを別プロジェクトから参照する方法
開発中などでまだライブラリ自体をGitHubに公開していないという場合、別のプロジェクトでこの作成途中のモジュールを読み込むには replace
ディレクティブを使うのが便利そうだった。
今回の場合、この replace
ディレクティブを用いて、ローカルで開発中のモジュールを別のGoプロジェクトに追加するということを行った。
下記は別のGoプロジェクトに対して、開発中のまだ公開されていないモジュール(同じローカル上にあるもの)を読み込むパターンでの記述だ。
module hogehoge go 1.18 require github.com/username/example v0.0.1 replace github.com/username/example => /fullpath/example
require
に書くURLについてだが、ここは実際には存在しないURLでも良いらしい。
つまり example.com/username/example
みたいな形で問題ないとのこと。
また v1.18
の環境では example
のようなURLではない記述でも特に問題なく動くことを確認しているので、replace
側で設定されている実際に参照しているパスが問題なければ一応はちゃんと動いてくれるようだ。
(当然 require
に書くURL(ここでは github.com/username/example
)については同じURLを replace
側の左側のパスにも書く必要がある。ここについては上に書いた例のようにしておけばOK)
ちなみにこのように存在しないURLを書いた場合、下記のようなエラーがVSCode上で出たが、特にそのまま実行はできているようだった。これについては原因がよく分かっていない。
error while importing github.com/username/example: expected 'package', found 'EOF'
あと require
にはversionを付ける必要があるが、特にversionがない場合、とりあえず適当に v0.0.1
とか付けておけばそれで動作的に問題はなさそうだった。
参考になりそうな公式ドキュメント
今回書いた内容については下記のドキュメントが参考になりそう。
まだGoの細かな仕組みについて理解が追いついていないので、もし誤りなどありましたらコメントいただけると助かります。