本文永久链接 – https://tonybai.com/2026/10/15/go-accepted-proposals-progress-2026-q3

大家好,我是Tony Bai。

三个月前,我翻开过 Go 官方仓库的一份特殊清单:171 个已经被接受、却仍然处于开放状态的提案。

这些提案并不是没有通过评审的“民间愿望”。它们已经获得 Go 团队的认可,技术方向原则上也达成了共识,却可能因为实现成本、兼容性风险、维护资源等原因,迟迟没有走到终点。

其中,一些提案已经等待了五年以上,最古老的甚至可以追溯到 2013 年。

当时,我提出过一个问题:Go 团队是不是正在加快消化这些历史遗留问题?

现在,三个月过去了,我们不妨再回到这份清单,看看发生了什么。

答案并不是简单的“是”或“否”。有些提案已经进入具体版本计划,有些完成了实现并关闭,还有一些只是留下了新的讨论记录。

而这恰恰让我们有机会看清 Go 提案机制中一个容易被忽略的事实:一个提案被接受,只代表社区认可了它的方向;真正的工程工作,往往才刚刚开始。

三个月过去,欠账清单发生了什么变化?

先看数据。

在 2026 年 7 月的统计中,golang/go 仓库有 171 个开放且带有 Proposal-Accepted 标签的 Issue。

截至 2026 年 10 月 12 日,按相同条件重新检查,开放清单约有 172 个 Issue。其中,约 53 个在最近 90 天内更新过,占当前清单的约 31%。

乍看之下,这似乎是一个积极信号:近三分之一的提案在最近一个季度出现过活动。

但先别急着下结论。

GitHub 的 Issue 更新时间可能来自评论、标签调整、里程碑变更,也可能来自自动化操作。一个 Issue 即使刚刚更新,也不代表有人已经开始编写实现代码。

反过来,一个长期没有评论的 Issue,也可能早已通过相关 CL 完成了大部分工作,只是剩下的部分仍未解决。

因此,如果我们要判断 Go 是否真的在清理历史技术欠账,就不能只数有多少 Issue 被更新,而要进一步追问:

  • 它只是重新引起了讨论,还是已经进入明确的版本计划?
  • 有没有出现真正的实现代码?
  • 代码是否经过审查并合入?
  • 对应的 Issue 是否最终关闭?

这几项指标,才是判断提案进展的关键。

先建立一把尺子:什么才算真正的进展?

为了避免把“有动静”误判为“快落地”,我们可以将 Accepted 提案的进展划分为四个层级。

这并不是说每个提案都必须严格按照图中顺序前进。有些提案会因为实现方案发生变化而重新讨论,也有些提案在进入当前清单之前就已经有了相关代码。

但它能帮助我们区分几种完全不同的信号。

L1 代表有人重新关注,L2 代表项目开始安排时间,L3 才意味着实现工作有了可以检查的抓手,L4 则是最明确的交付结果。

尤其值得关注的是 Gerrit CL。Go 的代码评审主要通过 Gerrit 进行,一个与提案直接相关的 CL,通常比 Issue 下的一条“Any updates?”更能说明问题。

带着这把尺子,我们来看三个案例。

三个提案,三种不同的推进方式

1. 十年等待:类型推断的复合字面量进入 Go 1.28 计划

第一个案例,是 Go 语言提案 #12854:类型推断的复合字面量。

它创建于 2015 年 10 月。对于一个现代编程语言来说,这个等待时间已经足够长。

提案想解决的问题并不复杂:在类型能够从上下文推导出来时,能否省略复合字面量中重复的类型信息?

例如,现有代码可能需要写成:

type Point struct {
    X, Y int
}

points := []*Point{
    &Point{1, 2},
    &Point{3, 4},
}

提案希望在合适的上下文中,允许更简洁的写法,减少嵌套结构中重复出现的类型信息。

它的目标,是让某些复杂的复合字面量更容易编写,也更容易阅读。不过,这并不是简单地“少打几个字”:语法变化会影响代码的可读性、规范定义以及开发者对类型推导规则的理解。

这个提案的最新状态尤其值得注意:它已经进入 Go 1.28 里程碑,并带有 FixPending 等标签。

这意味着它不再只是一个等待多年、没有明确版本安排的历史提案,而是进入了更具体的推进阶段。

但这里必须强调:进入里程碑不等于已经发布,FixPending 也不等于代码已经合入。

它是一个值得持续跟踪的进展信号,而不是可以提前宣布的胜利。

对于一个影响 Go 语法的提案而言,最终能否交付,取决于实现、评审以及语言变更流程能否顺利完成。

2. 从接受到关闭:弃用 h2c 包的提案走完了最后一公里

第二个案例,更接近我们想看到的完整闭环。

提案 #72039:弃用 x/net/http2/h2c 包,提出于 2025 年 2 月,并于 2026 年 4 月被正式接受。

为什么要弃用它?

golang.org/x/net/http2/h2c 提供了不加密的 HTTP/2 连接支持。随着 Go 1.24 在标准库中加入相关的 HTTP/2 能力,原有扩展包的一部分用途已经可以由标准库覆盖。

与此同时,h2c 中与 HTTP/1.1 协议升级有关的机制,面临着协议演进与维护成本问题。提案因此建议弃用该包,减少重复能力和后续维护负担。

这里有一个很值得注意的时间线:

  • 2026 年 4 月:提案被接受,进入实现阶段。
  • 2026 年 5 月:出现关联提交记录。
  • 2026 年 10 月 5 日:维护者确认实现已完成,并关闭 Issue。

整个过程说明,Accepted 并不意味着工作结束。对于这个提案,真正让它走向终点的是后续实现,以及最后明确的完成记录。

它也提醒我们:技术债务并不总是通过增加新功能来偿还,删除过时能力、减少维护负担,同样是工程进展。

这类工作未必像新增语言特性那样吸引眼球,却可能让整个生态变得更简单、更容易维护。

3. 工具链与兼容性清理:不要把一条新评论当成代码已经落地

第三个观察对象是 #64047:execabs 的弃用与迁移工作。

这类提案与语言语法变化不同。它涉及的是工具链和扩展库中的历史接口如何退出舞台,以及相关代码、文档和模块如何协调迁移。

近期的记录中,可以看到与 execabs 弃用、迁移有关的 CL 活动。这至少提供了一个可以进一步核查的线索:相关工作是否已经从 Issue 讨论推进到代码审查。

不过,在判断进展时,仍然需要确认每个 CL 与提案的具体关系,并检查它们的审查、合入状态。

原因很简单:一个仓库中的代码变更,可能只是与某个提案有关,也可能只是同一模块的其他维护工作。仅凭时间接近,不能认定它就是该提案的实现。

因此,对于这个案例,更稳妥的结论不是“提案已经完成”,而是:它值得通过关联 CL 继续追踪,确认近期活动是否真正转化为实现成果。

这也是观察开源项目时一个很重要的习惯:让结论跟着证据走,而不是让证据迁就结论。

这些信号意味着 Go 正在加速还债吗?

现在回到最初的问题。

最近一个季度,开放的 Accepted 提案中,约 53 个出现过更新;其中,我们也确实能找到进入版本计划、出现实现 CL,甚至完成并关闭的案例。

这说明历史提案并非全部停留在原地。

但要进一步得出“Go 团队整体上正在加速清理技术欠账”的结论,还缺少一个重要环节:我们需要比较一段时间内,提案从接受到实现、从实现到合入的实际速度,并区分新接受提案与多年积压的老提案。

单独观察一个季度的 Issue 更新时间,无法回答这个问题。

更严谨的评估至少需要持续跟踪以下指标:

指标 能回答什么问题
开放的 Accepted 提案数量 当前积压规模是否变化
最近一个季度新增的 Accepted 提案 新增速度有多快
最近一个季度关闭的 Accepted 提案 有多少提案完成了闭环
出现直接关联实现 CL 的提案数量 有多少工作真正进入实现阶段
老提案的年龄分布 历史积压是否在减少
从接受到合入的时间 提案实现周期是否缩短

其中,最值得长期关注的是最后两项。

如果开放提案数量下降,但减少的主要是新提案,而十年前的老提案依然纹丝不动,那么历史债务并没有得到实质性改善。

如果近期更新数量增加,但大量 Issue 只是标签调整或讨论重启,也不能说明实现速度提高了。

相反,如果多年未动的提案陆续出现实现 CL,老提案关闭数量增加,而且从接受到合入的时间逐渐缩短,那么我们才有更充分的理由说:Go 正在更有效地消化技术欠账。

因此,目前更合理的判断是:部分已接受提案正在出现明确进展,但是否构成整体性的加速趋势,还需要更长时间、更完整的数据来验证。

这个结论或许没有“Go 正在大规模还债”那么激动人心,却更接近公开工程记录真正能够告诉我们的事情。

对于 Go 开发者,这份清单意味着什么?

对普通 Go 用户来说,Accepted 提案清单可以帮助你判断某项语言或工具链改进究竟走到了哪一步。

如果一个提案已经被接受,却仍然停留在 Backlog,就不要仅凭“Accepted”期待它马上进入某个版本。

如果它进入了 Go1.28 这样的具体里程碑,可以继续关注版本开发过程,但仍要以实际实现和发布说明为准。

而对希望参与 Go 开源贡献的开发者来说,这份清单可能更有价值。

一个已经 Accepted 的提案,通常意味着核心设计方向已经有了共识。相比从零开始提出一个新功能,参与这类提案的后续实现,有时能把精力更集中地放在代码、测试、兼容性和文档上。

当然,也不要看到 Proposal-Accepted 就直接开始写代码。更好的步骤是:

  1. 阅读提案及其最近的讨论,确认设计是否发生变化。
  2. 检查是否已经有相关 CL,避免重复实现。
  3. 查看里程碑、FixPending 等标签,了解目前处于什么阶段。
  4. 如果实现方案仍不明确,先在 Issue 或相关评审中与维护者沟通。

开源贡献的关键,不只是写出一份能够运行的补丁,还要让补丁符合项目的设计、兼容性和维护要求。

对于 Go 这样高度重视向后兼容的语言,这一点尤其重要。

写在最后

Go 的 Accepted 提案清单,既是一份尚未完成的工作列表,也是一份公开的工程历史。

它记录了社区已经达成的共识,也记录了这些共识如何在现实约束下逐步转化为代码。

有些提案等待十年,终于进入版本计划;有些提案在接受之后,经过几个月的实现工作就能关闭;还有一些提案虽然近期出现了活动,却仍然需要进一步验证它们是否真正向前迈进。

这些差异恰恰说明,技术债务不是一个可以仅靠 Issue 数量来衡量的问题。

真正重要的,是那些尚未完成的工作有没有被重新看见,有没有人愿意承担实现责任,以及它们最终能否变成可靠、可维护、开发者真正用得上的代码。

所以,下一次看到 Go 仓库里一个提案被标记为 Accepted 时,不妨多问一句:

它什么时候会变成代码?

而对于那些已经等待多年的提案,也许答案就藏在下一次代码评审、下一次版本排期,或者某位愿意参与贡献的开发者手中。

参考资料

数据观察窗口:2026 年 7 月 14 日至 10 月 12 日。Issue 数量及状态会持续变化;文中的近期更新统计不等同于实现数量,也不单独构成整体提速的证据。


还在为写 Agent 框架频频死循环、上下文爆炸而束手无策?我的新专栏 《从0 开始构建 Agent Harness》 将带你:

  • 抛弃臃肿框架,回归“驾驭工程 (Harness Engineering)”的第一性原理
  • 用 Go 语言手写 ReAct 循环、并发拦截与上下文压缩引擎等,复刻极简OpenClaw
  • 构建坚不可摧的 Safety Middleware 与飞书人工审批防线
  • 在底层实现 Token 成本审计、链路追踪与自动化跑分评估
  • 从“调包侠”进化为掌控大模型边界的“AI 操作系统架构师”

扫描下方二维码,开启从 0 开始构建Agent Harness 的实战之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。