问题描述
我在JetBrains goland中有一个Go项目,其中所有文件都可运行但彼此独立。 但是要使每一个可运行,我都需要将它们作为包主体。 我在其他文件的其他地方定义了几个“顶点”,Goland对此表示抱怨。 但这仍然是可运行的,而这纯粹是戈兰德的抱怨。
问题-
解决方法
通常不建议使用多个在同一目录中声明main()
函数的文件,这主要是由于与您的问题类似。
但是,有几种解决方法。
您可以使用build constraints(也称为构建标记)在构建时分隔二进制文件。使用它们时,还需要使用Settings/Preferences | Build Tags & Vendoring
调整IDE。并且,根据构建应用程序的方式,您可能还需要调整build命令以向其添加相应的标签。
在这种情况下,我建议的另一种选择是将每个main()
定义文件移动到这样的结构中:
/repository_root
/cmd
/command1
command1.go (file holds the `main()` func)
/command2
command2.go (file holds the `main()` func)
/command3
command3.go (file holds the `main()` func)
/some
/package
some_file.go
some_other_file.go
....
some_other_file.go
以这种布局为例,您可以have a look at Delve,它使用类似的结构,但是在cmd
文件夹中只有一个“命令”。
最后,有时可以删除重复项并将其移到保存数据类型的公共文件中,但这并不总是理想的,并且会使构建命令更加复杂,因为您需要指定所有应包含的文件。包括在构建过程中。
编辑:
您可以在此处阅读有关如何组织Go软件包/应用程序的更多信息
这些文章将说明如何组织Go软件包:
- https://rakyll.org/style-packages/
- https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1#.ds38va3pp
- https://peter.bourgon.org/go-best-practices-2016/#repository-structure
要了解有关Go软件包的设计原理的更多信息:https://www.goinggo.net/2017/02/design-philosophy-on-packaging.html