本文永久链接 – 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 就直接开始写代码。更好的步骤是:
- 阅读提案及其最近的讨论,确认设计是否发生变化。
- 检查是否已经有相关 CL,避免重复实现。
- 查看里程碑、
FixPending等标签,了解目前处于什么阶段。 - 如果实现方案仍不明确,先在 Issue 或相关评审中与维护者沟通。
开源贡献的关键,不只是写出一份能够运行的补丁,还要让补丁符合项目的设计、兼容性和维护要求。
对于 Go 这样高度重视向后兼容的语言,这一点尤其重要。
写在最后
Go 的 Accepted 提案清单,既是一份尚未完成的工作列表,也是一份公开的工程历史。
它记录了社区已经达成的共识,也记录了这些共识如何在现实约束下逐步转化为代码。
有些提案等待十年,终于进入版本计划;有些提案在接受之后,经过几个月的实现工作就能关闭;还有一些提案虽然近期出现了活动,却仍然需要进一步验证它们是否真正向前迈进。
这些差异恰恰说明,技术债务不是一个可以仅靠 Issue 数量来衡量的问题。
真正重要的,是那些尚未完成的工作有没有被重新看见,有没有人愿意承担实现责任,以及它们最终能否变成可靠、可维护、开发者真正用得上的代码。
所以,下一次看到 Go 仓库里一个提案被标记为 Accepted 时,不妨多问一句:
它什么时候会变成代码?
而对于那些已经等待多年的提案,也许答案就藏在下一次代码评审、下一次版本排期,或者某位愿意参与贡献的开发者手中。
参考资料
- Tony Bai:171 个“已批准”却迟迟未实现的提案:Go 语言的十年“欠账清单”
- Go 提案 #12854:类型推断的复合字面量
- Go 提案 #72039:弃用
x/net/http2/h2c包 - Go 提案 #64047:
execabs的弃用与迁移工作 - Go 提案流程说明
- Go 1.28 里程碑
数据观察窗口: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技能再上一个新台阶!

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