2016-05-23 55 views
0

觀看旅途工具的源代碼,與閱讀本SO回答(和鏈接的文章)沿後: What is a sensible way to layout a Go project(從應用程序分開你的二進制)命令在單獨的模塊

例如以下設置:

myapp/ 
    cmd/ 
    first/ 
     main.go 
    second/ 
     main.go 
    third/ 
     main.go 
    otherpackage/ 

我很好奇你將如何去執行/建立/調試這樣的解決方案?

我應該在根目錄下有一個main.go,然後以某種方式執行cmd目錄中的不同軟件包,具體取決於用戶運行哪個命令?或者我如何構建這個沒有根目錄下的'main'包的多命令包?

+0

這個存在的問題可能會提供一些線索(http://stackoverflow.com/questions/22391847/package-structure-for-go-app-engine-project) – miltonb

回答

1

您不需要根包裝中的main.go。如果您進入myapp文件夾並運行go install ./...,則Go將遞歸搜索子文件夾中的main()函數。

對於不同包中的每個main()函數,Go會將其編譯爲包含所有必需包的單個可執行文件。在你的例子中,它會產生三個二進制文件:first,secondthird

關於執行/調試,你只需要按照通常的方式進行。也就是說,您可以使用標準測試逐個實施和測試您的軟件包。如果要測試編譯的二進制文件,可以使用exec.Cmd結構。

另外,如果你想好看的命令,你可以使用一些第三方的庫,例如cobracli

+0

謝謝!深入研究go工具代碼,我還注意到二進制「go tool」實際上查找並執行其他二進制文件。執行「go tool vet」實際上會執行一個名爲「vet」的二進制文件。通過這種方式,他們可以像單獨的二進制文件一樣構建他們的所有命令,但仍然會讓你感覺它只是一個組織良好的組織。 – fgblomqvist