【问题标题】:Cmd folder for organizing project files in Go用于在 Go 中组织项目文件的 Cmd 文件夹
【发布时间】:2015-08-15 19:05:01
【问题描述】:

我已经搜索了在项目中组织 Go 文件的解决方案,并找到了 this post。我想知道cmd 文件夹的作用是什么,该文件夹在该帖子的第二部分中使用。对于 Go 编译器来说,这是一个神奇的词吗? 另一方面,我正在阅读Go documentation,其中没有关于cmd 文件夹的内容。

那么这个文件夹呢?在 Go 中构建支持源文件、项目二进制文件、第 3 方包和单元测试的项目文件的最佳实践是什么。

【问题讨论】:

  • 将二进制文件放入cmd 文件夹只是一种约定。 go 工具不会特别对待cmd
  • 嗨@vansimke,你能帮我解决这个问题吗?

标签: go


【解决方案1】:

那么这个 'cmd' 文件夹呢?

post已经说清楚了,总结一下:

  1. 这在 Go 中既不是魔法也不是标准。这只是一个约定。
  2. 您可以将多个二进制文件放入一个子文件夹中,这在根文件夹中是不可能的。
  3. 通过让您将二进制文件作为客户端而不是应用程序的主机或门户,它可以驱使您采用所谓的“库驱动开发”方式来构建程序。这种分离“帮助您进行更清晰的抽象”并且更常见的代码逻辑。

在 Go 中构建支持源文件、项目二进制文件、第 3 方包和单元测试的项目文件的最佳做法是什么。

我不确定最佳做法。官方文档中有很多关于项目文件结构的提示。 根据我的个人实践,除了二进制文件的 cmd 文件夹之外,我
1. 将源文件分组到 src 文件夹内的包(子文件夹)中,
2. 将第 3 方包复制到 vendor 文件夹;
3. 将单元测试文件与其目标源文件并排放置。

这些链接可能会有所帮助:

Organizing Go code
The Go Blog: Organizing Go code
The Go Blog: Package names
golang-standards/project-layout

【讨论】:

  • golang-standards/project-layout 可能应该从您的链接中删除。关于它的提案不是“标准”的问题进行了长时间的讨论。有关更多信息,请查看回购中的issue 117
【解决方案2】:

post you cite 的作者明确表示 Camlistore 应用程序向他介绍了 cmd 约定。

如果您查看Camlistore 的源代码,您会注意到该项目使用自定义系统进行构建,即“make.go”。

cmd 之所以特殊只是因为 Camlistore 项目使用“go run make.go”来构建,并且 make.go 知道如何在 cmd 目录中构建目标。或者在更一般的情况下,只有当您使用将其视为特殊的构建系统时, cmd 才是特殊的。

【讨论】:

  • Go cmd 约定与 camlistor 的构建无关。
  • 该帖子的作者在 OP 的问题中明确引用了它。因此,在尝试理解作者提倡的 cmd 约定时不值得研究吗?我不明白反对票。
  • @golliher 感谢您提供有关cmd 文件夹的信息,您能帮我解决我的问题的第二部分 - 组织项目文件的最佳实践和常用方法
  • @amirhosseinab 欢迎您。如果我能提供帮助,我很高兴。虽然我觉得有资格回答第一部分,但实际上我自己仍然是一名学习者,并且没有资格尝试为您提供组织 Go 项目的一般最佳实践。对不起。我怀疑这是一个主观的东西。对于 CLI 应用程序,我使用了一个名为 github.com/spf13/cobra 的框架,因此我遵循它的模式并使用 Hugo 的源代码来帮助指导我 (github.com/spf13/hugo) 如果我正在编写一个 Revel 应用程序,我怀疑组织会有所不同 (@987654325 @)。
  • 这可能是您问题第二部分的答案。 stackoverflow.com/questions/9985559/…
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 2015-10-11
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
相关资源
最近更新 更多