猿问

重命名后Golang相关包导入

我的 $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,那么包导入的最佳做法是什么?

那么我是否需要手动更新导入包的名称?


哔哔one
浏览 235回答 1
1回答

不负相思意

规则#1:不要使用相对导入。这就是(部分)您遇到问题的原因。通读这个:https : //golang.org/doc/code.html#Library使用完全限定的导入路径(如您所示):import(&nbsp; &nbsp; "project1/package1"&nbsp;&nbsp;&nbsp; &nbsp; "project1/package2"&nbsp; &nbsp;&nbsp; &nbsp; "project1/package3"&nbsp; &nbsp; // Or ideally, so others can access it in the future:&nbsp; &nbsp; "github.com/<yourusername>/project1/package4")&nbsp;&nbsp;如果出于某种原因您想对软件包进行版本控制,您可以:提供新的存储库(导入 URL)使用类似 gopkg.in (&nbsp;http://labix.org/gopkg.in&nbsp;)的服务来提供版本化的导入 URL (例如 gopkg.in/you/pkgname.v2)
随时随地看视频慕课网APP

相关分类

Go
我要回答