2014-09-29 69 views
3

我刚刚开始使用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”。

我在做什么错了?

回答

1

软件包名称必须与目录名称匹配。将源文件移动到新目录需要您更改软件包名称。

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”的软件包提供您的进口规定“富”

P.S.的所需位置软件包名称的约定是小写的,没有标点符号(例如,不是_)

-1

它告诉你你做错了什么,你不能将一个包分离到多个文件夹中。

您需要设置并正确使用$GOPATH,并在routes.go中正确导入routes/文件夹。

它的一个简单的例子是:

// 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