一尘不染

重命名后导入Golang相对软件包

go

我的$ 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,则导入软件包的最佳实践是什么?
那我需要手动更新导入的软件包的名称吗?


阅读 236

收藏
2020-07-02

共1个答案

一尘不染

规则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)之类的服务来提供版本化的导入URL(例如gopkg.in/you/pkgname.v2)。
2020-07-02