如何在golang中进行短/相对导入?

时间:2017-07-17 00:01:49

标签: go import

是否可以在go代码中进行相对导入?我阅读了很多例子,但我真的无法理解如何制作它。例如,我有一个项目app和一个子包utils

app
   main.go
   utils
        utils.go

utils.go:

package utils

import "fmt"

func TestFunc()  {
    fmt.Print("I'm a TestFunc")
}

有没有办法仅使用import "./utils"import "app/utils导入此包,但不能采用import "github.com/hithubuser/app/utils"之类的所有路径?

如果没有办法,你如何使用嵌套包?你是否为所有进口都写了一条完整的路径,或者你没有做到这一点?

2 个答案:

答案 0 :(得分:4)

通常导入路径在$GOPATH/src后开始,请参阅doc

假设你有目录结构:

$GOPATH/src/github.com/hithubuser/app/utils

# your import path is 'github.com/hithubuser/app/utils'
  

您是否为所有导入编写了完整的路径,或者您是否避免使用它?

是的,通常使用完全导入,因为它使您能够将代码分发为go库。这样您就可以根据需要开发可重用的代码并将其导入任何项目中,或者将其发布到Go社区。

我们假设您有独立项目,没有参考任何其他Go项目,并且您正在分发为二进制而不是go库。然后你就可以做到这样的事情(尽管不常用/推荐)。

只需在$GOPATH/src {g}点击你的仓库即可{@ 1}}

git clone github.com/hithubuser/app

答案 1 :(得分:1)

另一种可能性是使用Go 1.5中引入的供应商设施。

  1. 创建vendor目录。
  2. git clone目录复制(或utils或其他)作为vendor的子目录,因此您的层次结构现在如下所示:

    app
    |-- main.go
    `-- vendor/
        `-- utils/
            `-- utils.go
    
  3. Set the GO15VENDOREXPERIMENT environment variable to 1如果您使用的是Go 1.5,则可以启用销售支持。较新的版本默认启用它。