此版本中重新声明了“顶点”

问题描述

我在JetBrains goland中有一个Go项目,其中所有文件都可运行但彼此独立。 但是要使每一个可运行,我都需要将它们作为包主体。 我在其他文件的其他地方定义了几个“顶点”,Goland对此表示抱怨。 但这仍然是可运行的,而这纯粹是戈兰德的抱怨。

问题-

  1. 是否有更好的方法来组织文件
  2. 如果没有,是否可以关闭Goland的投诉?

enter image description here

解决方法

通常不建议使用多个在同一目录中声明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软件包:

要了解有关Go软件包的设计原理的更多信息:https://www.goinggo.net/2017/02/design-philosophy-on-packaging.html