go - 用于在 Go 中组织项目文件的 Cmd 文件夹

标签 go

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

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

最佳答案

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

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

  1. It's not a magic nor standard in Go. It's just a convention.
  2. You can have multiple binaries when putting them into a sub-folder which is not possible in the root folder.
  3. By making you taking your binary as a client instead of a host or portal of your application, it can drives you to the so-called 'library-driven-development' way of architecting your program. This separation 'helps you make a cleaner abstraction' and more common of you code logic.

在 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 (*)

正如@DiegoMendes 所指出的,最后一个链接中的提案存在争议。您还应该检查 the issue 117那个包含很多有值(value)信息的repo。

关于go - 用于在 Go 中组织项目文件的 Cmd 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32028287/

相关文章:

go - 检查我是否可以从 channel 读取

go - 可以在一个 FlatBuffers 缓冲区中编码多个表吗?

go - 如何在不破坏客户端代码的情况下拆分大包?

function - 将不同类型的参数传递给函数

http - Golang 多次读取请求正文

几分钟后,Go 爬虫在从输出 channel 中选择时停止

go - 创建未知类型的 slice ?

swift - http Post 说它可以工作,但它没有在本地主机上发布

go - append() 中的 "..."符号不适用于附加不同类型的 slice

templates - 用于源和目标打印的 Golang 模板