递归编译文件

时间:2014-09-29 08:20:25

标签: go

我刚从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”。

我做错了什么?

2 个答案:

答案 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