我刚从Go开始,我喜欢它!我试图让我的项目结构更易于管理,而不是在main.go中有所有内容
所以现在我有了这样的结构。
src/
-> main.go
-> routes.go
-> handlers/
--> user_handlers.go
但是当我尝试用以下命令构建它时
go build -v -o ./bin/my_bin ./src/...
我收到此错误
cannot use -o with multiple packages
但如果我把它变成像这样的扁平结构
src/
-> main.go
-> routes.go
-> user_handlers.go
它工作正常,我的所有文件都在其中包含“package main”。
我做错了什么?
答案 0 :(得分:2)
包名称必须与目录名称匹配。将源文件移动到新目录要求您还更改包名称。
foo/foo.go // package foo
foo/bar/bar.go // package bar
foo/bar/qux.go // package bar
PATH与包名无关。
Package foo: /some/path/some/where/foo
这允许创建和导入多个“foo”包,前提是您的导入指定了“foo”的所需位置
P.S。包名称的约定是小写的,没有标点符号(例如,没有_的)
答案 1 :(得分:-2)
它告诉你你做错了什么,你不能将一个包分成多个文件夹。
您需要设置并正确使用$GOPATH
并正确导入routes/
中的routes.go
文件夹。
一个简单的例子是:
// routes.go
// the . means you can call imported functions without prefixing them with the package name
import . "full-path-to-routes/-relative-to-$GOPATH"
来自https://golang.org/doc/code.html:
GOPATH环境变量指定工作区的位置。在开发Go代码时,它可能是您需要设置的唯一环境变量。
首先,创建一个工作区目录并相应地设置GOPATH。您的工作区可以位于您喜欢的任何位置,但我们将在本文档中使用$ HOME / go。请注意,这与Go安装的路径不能相同。
我强烈建议您阅读Effective Go。