golang 如何import本地package
项目使用golang开发,同一个项目下有两个独立模块,虽然独立,可以共享一些库,抽象出来,目录结构如下,在 b/main.go
中 import "pktest/a"
pktest ├── a │ └── test.go └── b └── main.go
如果不使用go mod
,pktest在 GOPATH
下,import 很自然,使用go mod
后,问题就来了。使用 go mod
后的目录结构如下,这里两个模块必须都使用go mod
pktest.in ├── a │ ├── go.mod │ └── test.go └── b ├── go.mod └── main.go
1 missing dot in first path element
go mod
要求模块路径的第一部分必须带 .
,这个估计是为了方便下载做的规定。为此把 pktest
改为 pktest.in
这个涉及的改动较多,使用脚本: find . -name '*.go' | xargs sed -i -E 's/"pktest\/a/"pktest.in\/a/g'
这里最好多限定一些关键字,以免误替换。
2 cannot find module providing package pktest.in/a
修改为 pktest.in
之后报这个错误,毕竟 pktest.in
是不存在的,没法从网络上找到,必须显示的告诉 go mod
从哪里寻找: go mod edit -replace pktest.in/a=../a
注意如果a下面还有package,假设为aa,如果b引用得是 pktest.in/a/aa
那么编译报错,就是 pktest.in/a/aa
找不到,不管报哪个package找不到, go mod edit
替换的路径始终是 go.mod
所在的路径。