ちょっとハマったので自分用メモ。
Go Modules環境でローカルに配置した共有packageと、子packageを使う場合の指定の仕方。
TL;DR
別moduleならgo.modにreplace
で相対パスを記載する。
同一moduleならimport 自module名/ディレクトリ名
で指定する。
フォルダ構成
project_root
├── module_a
│ ├── go.mod
│ └── main.go ... ここで common_module/common を使いたい
│
├── module_b
│ ├── go.mod
│ ├── main.go ... ここで common_module/common と sub_package を使いたい
│ └── sub_package
│ └── sub.go
│
└── common_module
├── go.mod
└── common.go
ソースコード
module_a
module module_a
go 1.13
require common_module/common v0.0.0
replace common_module/common => ../common_module
package main
import (
"common_module/common"
)
func main() {
common.Test()
}
module_b
module module_b
go 1.13
require common_module/common v0.0.0
replace common_module/common => ../common_module
package main
import (
"common_module/common"
sub "module_b/sub_package"
)
func main() {
common.Test()
sub.Sub()
}
参考
以下のサイトを参考にしました。
モノレポ(mono repository)内でgoのmoduleを相対パスで利用する方法
http://chidakiyo.hatenablog.com/entry/2019/07/04/%E3%83%A2%E3%83%8E%E3%83%AC%E3%83%9D%EF%BC%88mono_repository%EF%BC%89%E5%86%85%E3%81%A7go%E3%81%AEmodule%E3%82%92%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B
ローカル環境のみでの Go Modules と自作パッケージ
https://qiita.com/tkj06/items/a5f79417935100045650
Go Modulesとマルチモジュール構成でGo Homeする方法
https://qiita.com/hinastory/items/336c2d944fdb8ae11efb