2014-09-29 62 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