具有相对路径的包布局
Packages layout with relative paths
我正在学习 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”。
现在,如果我尝试 "go build Main.go",我会得到:
router\Router.go:6: imported and not used: "_/D_/GOPATH/src/pack1"
router\Router.go:14: undefined: Logger
和类似的错误,看来我做的 pack1 包的导入是错误的。当然,在属于 pack1 的所有文件中,在 header 中我已经放置了 "package pack1" 定义。
我还读到 Go 中不建议使用相对导入,使用广告导入等远程包可能很有用 "github.com/myrepo/mypackage"。
但我不想使用远程导入;我想在一秒钟内推送我所有的文件。
你能帮我更好地理解在 Go 中包之间进行本地导入的方法是什么吗?
您不应该使用相对导入的原因是它们在 $GOPATH
内部不起作用。删除导入路径中的 "relative" 部分,因为所有导入都是相对于 $GOPATH/src
import (
"pack1"
"router"
)
您还想将 Main.go
移动到一个包中,这样您就可以充分利用 go 工具。
正如 JimB 所说,通读 'How to write go code' link,特别是 https://golang.org/doc/code.html#ImportPaths
- 所有包都存在于从 $GOPATH/src.
开始的目录树中
- 导入路径实际上是包的完整路径(从 1)
- GO 中没有子包。
- 主要包用于创建命令
因此在您的情况下,您的导入路径将是 "pack1" 和 "router"
我正在学习 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”。 现在,如果我尝试 "go build Main.go",我会得到:
router\Router.go:6: imported and not used: "_/D_/GOPATH/src/pack1"
router\Router.go:14: undefined: Logger
和类似的错误,看来我做的 pack1 包的导入是错误的。当然,在属于 pack1 的所有文件中,在 header 中我已经放置了 "package pack1" 定义。
我还读到 Go 中不建议使用相对导入,使用广告导入等远程包可能很有用 "github.com/myrepo/mypackage"。 但我不想使用远程导入;我想在一秒钟内推送我所有的文件。
你能帮我更好地理解在 Go 中包之间进行本地导入的方法是什么吗?
您不应该使用相对导入的原因是它们在 $GOPATH
内部不起作用。删除导入路径中的 "relative" 部分,因为所有导入都是相对于 $GOPATH/src
import (
"pack1"
"router"
)
您还想将 Main.go
移动到一个包中,这样您就可以充分利用 go 工具。
正如 JimB 所说,通读 'How to write go code' link,特别是 https://golang.org/doc/code.html#ImportPaths
- 所有包都存在于从 $GOPATH/src. 开始的目录树中
- 导入路径实际上是包的完整路径(从 1)
- GO 中没有子包。
- 主要包用于创建命令
因此在您的情况下,您的导入路径将是 "pack1" 和 "router"