重命名后的golang相关包导入
Golang relative package import after renaming
我的 $GOPATH 是
"/Users/peter/goworkspace"
我当前的 golang 版本:
go version go1.6 darwin/amd64
我在这个工作空间下有多个golang项目,所以这里是目录结构
+/goworkspace
+---/bin
+---/pkg
+---/src
+---/project1
+---package1
+---file1.go
+---file2.go
+---file3.go
+---package2
+---package3
+---main.go
+---/project2
+---/project3
在我的 proj1 的 main.go 中,我将使用该项目下其他包的导入,它看起来像:
import(
"./package1"
"./package2"
"./package3"
)
但是当我 运行 "go build" 时,我一直收到错误消息:
“
无法加载包:在非本地包中本地导入“../package”
如果我不喜欢使用相对包路径,例如使用它:
import(
"project1/package1"
"project1/package2"
"project1/package3"
)
那么一切都会好起来的。
如果我使用相对包路径,我的代码有什么问题?
如果 project1 的名称将来会更改,例如更改为 projecet1v2,那么包导入的最佳做法是什么?
那我需要手动更新导入包的名称吗?
规则 #1:不要使用相对导入。这就是(部分)您 运行 遇到问题的原因。仔细阅读:https://golang.org/doc/code.html#Library
使用完全限定的导入路径(如您所示):
import(
"project1/package1"
"project1/package2"
"project1/package3"
// Or ideally, so others can access it in the future:
"github.com/<yourusername>/project1/package4"
)
如果出于某种原因你想对你的包进行版本控制,你可以:
- 提供新的存储库(导入URL)
- 使用 gopkg.in (http://labix.org/gopkg.in) 之类的服务来提供版本化导入 URLs(例如 gopkg.in/you/pkgname.v2)
我的 $GOPATH 是
"/Users/peter/goworkspace"
我当前的 golang 版本:
go version go1.6 darwin/amd64
我在这个工作空间下有多个golang项目,所以这里是目录结构
+/goworkspace
+---/bin
+---/pkg
+---/src
+---/project1
+---package1
+---file1.go
+---file2.go
+---file3.go
+---package2
+---package3
+---main.go
+---/project2
+---/project3
在我的 proj1 的 main.go 中,我将使用该项目下其他包的导入,它看起来像:
import(
"./package1"
"./package2"
"./package3"
)
但是当我 运行 "go build" 时,我一直收到错误消息:
“
无法加载包:在非本地包中本地导入“../package”
如果我不喜欢使用相对包路径,例如使用它:
import(
"project1/package1"
"project1/package2"
"project1/package3"
)
那么一切都会好起来的。
如果我使用相对包路径,我的代码有什么问题?
如果 project1 的名称将来会更改,例如更改为 projecet1v2,那么包导入的最佳做法是什么?
那我需要手动更新导入包的名称吗?
规则 #1:不要使用相对导入。这就是(部分)您 运行 遇到问题的原因。仔细阅读:https://golang.org/doc/code.html#Library
使用完全限定的导入路径(如您所示):
import(
"project1/package1"
"project1/package2"
"project1/package3"
// Or ideally, so others can access it in the future:
"github.com/<yourusername>/project1/package4"
)
如果出于某种原因你想对你的包进行版本控制,你可以:
- 提供新的存储库(导入URL)
- 使用 gopkg.in (http://labix.org/gopkg.in) 之类的服务来提供版本化导入 URLs(例如 gopkg.in/you/pkgname.v2)