GoLang和包含相对路径的布局

时间:2016-05-18 22:15:32

标签: go package packages

我正在学习Go语言,我做了这个例子: http://thenewstack.io/make-a-restful-json-api-go/ 构建一个简单的REST API。

我编译了它,一切正常,但所有来源都在主包中。

现在我想在包中组织我的.go文件,所以我将它们移到某些文件夹中:

GOPATH\bin
GOPATH\pkg
GOPATH\src\pack1\Handlers.go
GOPATH\src\pack1\Logger.go
GOPATH\src\pack1\repo.go
GOPATH\src\pack1\Todo.go
GOPATH\src\router\Router.go
GOPATH\src\router\Routes.go
GOPATH\src\Main.go

Main.go使用所有的路由器包,所以我放入了导入部分: “。/路由器”。 Router.go使用pack1包,所以在Router.go中我导入了“../pack1”。 现在,如果我尝试“构建Main.go”,我会得到:

router\Router.go:6: imported and not used: "_/D_/GOPATH/src/pack1"
router\Router.go:14: undefined: Logger

和类似的错误,所以似乎导入了我所做的pack1包,这是错误的。当然在属于pack1的所有文件中,在标题中我都放了“package pack1”定义。

我还读过Go中没有建议相对导入,使用远程包这样的广告可能很有用,例如广告导入“github.com/myrepo/mypackage”。 但我不想使用远程导入;我想在第二时刻推送我的所有文件。

你能帮我更好地了解用Go语言在包之间进行本地导入的方法吗?

提前致谢

2 个答案:

答案 0 :(得分:4)

您不应该使用相对导入的原因是他们不在$GOPATH内工作。摆脱"亲戚"部分导入路径,因为所有导入都与$GOPATH/src

相关
import (
    "pack1"
    "router"
)

您还需要将Main.go移到包中,这样您就可以充分利用go工具。

答案 1 :(得分:0)

正如JimB所说,请仔细阅读“如何编写去代码”链接,特别是https://golang.org/doc/code.html#ImportPaths

  • 所有包都存在于$ GOPATH / src开始的目录树中。
  • 导入路径实际上是包的完整路径(从1开始)
  • GO中没有子包。
  • 主程序包用于创建命令

因此,在您的情况下,您的导入路径将是“pack1”和“router”