2016-05-23 38 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