重命名后导入Golang相对包

重命名后导入Golang相对包,go,package,Go,Package,我的$GOPATH是 "/Users/peter/goworkspace" 我当前的golang版本: go version go1.6 darwin/amd64 我在这个工作区下有多个golang项目,下面是目录的结构 +/goworkspace +---/bin +---/pkg +---/src +---/project1 +---package1 +---file1.go +---fi

我的$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:不要使用相对导入。这是(部分)您遇到问题的原因。请通读以下内容:

使用完全限定的导入路径(如图所示):

导入(
“项目1/包1”
“项目1/包2”
“项目1/包3”
//或者理想情况下,其他人可以在将来访问它:
“github.com//project1/package4”
)  
如果出于某种原因,您希望对软件包进行版本设置,您可以:

  • 提供新存储库(导入URL)
  • 使用像gopkg.in()这样的服务来提供版本化的导入URL(例如gopkg.in/you/pkgname.v2)

如果有必要,我必须将项目1重命名为项目1v2,如何?在导入过程中,我必须更新它,对吗?是否有好的解决方案,这样我就不需要手动更新它们?这也是我在这里使用相对导入的原因。你不应该将其“重命名”为v2。将其分叉/复制,然后创建第二个新包作为v2(这样v1用户在升级之前仍然可以使用v1,而不会破坏他们的程序)。哦,这是golang对我来说最糟糕的部分:(
import(
    "project1/package1"  
    "project1/package2"   
    "project1/package3"
    // Or ideally, so others can access it in the future:
    "github.com/<yourusername>/project1/package4"
)