是否可以在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"
之类的所有路径?
如果没有办法,你如何使用嵌套包?你是否为所有进口都写了一条完整的路径,或者你没有做到这一点?
答案 0 :(得分:4)
通常导入路径在$GOPATH/src
后开始,请参阅doc。
假设你有目录结构:
$GOPATH/src/github.com/hithubuser/app/utils
# your import path is 'github.com/hithubuser/app/utils'
您是否为所有导入编写了完整的路径,或者您是否避免使用它?
是的,通常使用完全导入,因为它使您能够将代码分发为go库。这样您就可以根据需要开发可重用的代码并将其导入任何项目中,或者将其发布到Go社区。 p>
我们假设您有独立项目,没有参考任何其他Go项目,并且您正在分发为二进制而不是go库。然后你就可以做到这样的事情(尽管不常用/推荐)。
只需在$GOPATH/src
{g}点击你的仓库即可{@ 1}}
git clone github.com/hithubuser/app
答案 1 :(得分:1)
另一种可能性是使用Go 1.5中引入的供应商设施。
vendor
目录。将git clone
目录复制(或utils
或其他)作为vendor
的子目录,因此您的层次结构现在如下所示:
app
|-- main.go
`-- vendor/
`-- utils/
`-- utils.go
Set the GO15VENDOREXPERIMENT
environment variable to 1如果您使用的是Go 1.5,则可以启用销售支持。较新的版本默认启用它。