文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

上帝视角看 “Go 项目标准布局” 之争

2024-12-03 05:27

关注

本文转载自微信公众号「脑子进煎鱼了」,作者陈煎鱼。转载本文请联系脑子进煎鱼了公众号。

大家好,我是煎鱼。

前段时间 Go 语言社区有一件事情引爆了热议,那就是 golang-standards/project-layout 项目的 “Go 项目的标准布局” 之争。

没想到,五一假期,认真一看,这个 issues 已经提出将近一个月了,仍然在热议阶段,我想,咱们需要好好的聊聊这个话题。

煎鱼带你了解下的前因后果,再分享我的看法和业务真实情况。

背景

问题发生地

在 GitHub 上有一个项目 Spaghetti(github.com/adonovan/spaghetti),是 Go 软件包的一个依赖性分析工具。

该项目的目录结构如下:

 

看上去并不复杂,代码量不多,文件平铺也不超过一屏,就是一个布局比较简单的项目。

有一位老哥提出了一个 PR,明确的期望该项目按照 golang-standards/project-layout 项目给出的 “标准” 布局来调整。:

 

我猜测该项目可能是因为把 Go、HTML、JS、PNG 和 go.mod 文件等摆在了一起,引起了该同学的一丝丝纠结,觉得比较乱?

“标准布局“ 长什么样子

在 golang-standards/project-layout 项目中,其自称:

 

项目的组织名也是 "golang-standards",其提供了一个基本的 Go 项目布局,精简展示如下:

  1. project-layout 
  2. ├── api 
  3. ├── cmd 
  4. ├── configs 
  5. ├── docs 
  6. ├── go.mod 
  7. ├── init 
  8. ├── internal 
  9. ├── pkg 
  10. ├── scripts 
  11. ├── vendor 
  12. ├── ... 

更具体的布局介绍,大家可以参见 project-layout 项目的 README,其基本把方方面面的目录都考虑到了(人多力量大)。

由于内容过于长,因此就不一一展示了。

Russ Cox 现身原因

不过很巧,该项目的作者是前 Google 员工,是 gopl.io 项目(5.1k stars)的作者。

在仅仅过去 23 分钟后,作为 GoTeam Leader 的 Russ Cox(@rsc)就现身,并提出新的 issue 表达出了反对意见:

 

在 golang-standards/project-layout 项目的 README 中有明确指出这不是官方的标准,有如下声称:

it is a set of common historical and emerging project layout patterns in the Go ecosystem.

Russ Cox 主要是对声称 "这是一套 Go 生态系统中常见的历史和新兴的项目布局模式" 这一说法表示了 “不准确” 的意见。

例如:Go 生态系统中的绝大多数包都不会将可导入的包放在 pkg 子目录中。更广泛地说,这里描述的只是非常复杂的工程项目,而 Go 的仓库往往要简单得多。

另外,不幸的是,这套项目布局在组织名字上被称作 "golang-standards"(Golang 标准) 提出来,实际上并非真的是官方标准,有误导的情况存在。

Russ Cox 反对原因

在了解 project-layout 项目所提供的 “标准“ 项目布局和 Russ Cox 提出 issues 的背景后。

我们进一步了解 Russ Cox 认为这不对的根本考虑。project-layout 这个项目有两个问题:

Go 项目布局的标准是什么

提出这个 issues 后,出现了一大堆人追问 Russ Cox,到底何为 Go 项目的布局标准?

Russ Cox 给出了正式回应,一个可导入的 Go repo 的最小标准布局是:

就这样了,这就是 "标准",没有那么复杂。不需要像 project-layout 项目一样的布局。像是 Go 官方的 golang.org/x 仓库打破了 project-layout 所说的这些 "规则 "中的每一条。

Go 提案

在经历了长时间的口水战后,已经有人在 Go 官方仓库提出希望释出相关的提案(proposal):

 

猜测可能会有如下几种可能:

后续大家继续关注该提案,就可以知道发展了,传送门:issues #45861。

按照惯例,我猜测第三种可能性最大,因为很难有人可以提供所有开发者认可的标准,每个事业部、团队的喜好都可能有所不同。

总结

实际上,任何东西自称 “XX 标准”,在名气大后,都会带来一些问题。就像本文提到的 golang-standards/project-layout 项目一样。

换位思考一下,若你是某个项目的 Leader,某一天你的同事,被人拿着 “标准” 来建议修改时,说这是这个项目的 “标准”,会不会很奇妙?

无独有偶,我有一个朋友,他们公司早年只有一套 DDD 标准,本想统一。结果后面每一个介入 DDD 的业务同学,都认为前人不标准,每个人都自创了一套 DDD 标准。

总是会有小伙伴想让定义绝对的 “标准”,又或是 “最佳实践”。其实是难以定义的,最好的就是能够一个团队内形成基本共识,这里面牵扯到的不单单只有技术...

 

 

来源:脑子进煎鱼了内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯