【问题标题】:How should I structure a simple Go project?我应该如何构建一个简单的 Go 项目?
【发布时间】:2014-02-13 18:44:29
【问题描述】:

我有一个非常简单的 Go 项目,我正在尝试对其进行重组,使其遵循正常的 Go 项目结构(因此我可以运行 go build)。

我目前有两个源文件,都带有package main。所有文件,包括我的程序在运行时需要的一些文本配置文件。

所以现在,它看起来像:

<project_name>
    - main.go
    - source2.go
    - config_file.txt

当我在这个目录中时,我可以运行go build,它会创建一个二进制文件(名为&lt;project_name&gt;。这工作正常,但我想设置它以更好地遵循 Go 标准包结构(以便 Intellij IDEA 将其识别为有效项目)。

现在,我在 Git 中有整个 project_name> 目录,我想保持这种状态。

我尝试将源文件放在名为src 的文件夹中,但随后go build 说没有任何源文件要编译。

我应该如何构建它?

编辑:

解决了将东西放入 src/ 的问题:我需要运行 go build &lt;project_name&gt;
我仍然想知道是否有办法在没有全局 GOPATH 的情况下设置项目。我将所有项目都放在一个文件夹下,每个项目都有一个子文件夹(并非所有项目都是 Go 项目)。我想保留那个系统。

我想要的是:

projects/
    - project 1/
         - src/
         - bin/
         - pkg/
    - project 2/
         - src/
         - bin/
         - pkg/

然后我希望能够运行go build &lt;project_name&gt;(当我在该项目的目录中时)并让它编译该项目。这可能吗?

【问题讨论】:

  • 请注意,您始终可以将 GOPATH 指定为可能也存在非 Go 项目的目录。 Go 会忽略它们。
  • 对,但我不想为我所有的 Go 项目都拥有一个通用的 src 文件夹。
  • 这很正常:src//go get 的运作方式。不要认为src 文件夹包含一堆代码:它只是包源代码的集合(而不是二进制文件或头文件)。我的 GOPATH 包含一堆 github.com/user/ 文件夹,用于我下载的不同包,还有一堆 code.google.com/project 文件夹,用于我下载的其他包,当然还有我自己的项目。通过将我自己的项目符号链接到更易于访问的地方,我使这变得更容易了,而不必弄乱我的 GOPATH。

标签: go


【解决方案1】:

How to Write Go Code 中描述了组织 Go 代码的“规范”方式。在this blog post 中以不太正式的方式对其进行了解释。这个概念有点与你的想法相反——你有一个工作区目录,由 GOPATH 环境变量指定,所有项目的源代码都位于工作区的“src”目录的子目录中。如果在 GOPATH 中指定多个目录,则可以有多个工作区。

我建议你给“推荐”的方式来组织你的代码一个机会,也许它会在你身上成长。这可能看起来有点不寻常,但它有它的优点。如果你发现你绝对不能忍受它,你仍然可以解决它,例如通过在脚本中动态设置 GOPATH。

至于 Golang IDEA 插件,我前段时间尝试的最后一个版本还不支持这种项目结构,但新版本可能已经改变了这一点。事实上,该插件的一位作者 (dlsniper) 已在上述博客文章中添加了评论,给出了仍然使用全局 GOPATH 的替代项目结构的示例。

【讨论】:

  • 我最终将我所有的开发项目(无论是否执行)都放在了 GOPATH 中。文件夹/文件结构非常灵活,我所有的 git 存储库都放在一个地方,现在有一个统一的结构。挺好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多