编译工具链
编译
- code/gc0initial Ken Thompson,Go 0 编译器初始版本,2008年3月28日。
- code/6g Rob Pike,Go 0 第一个完整的编译器,2008年6月4日。
- design/go12symtab Russ Cox,Go 1.2 运行时符号信息,2013年7月。
- design/go13compiler Russ Cox,Go 1.3+ 编译器大修,2013年12月。
- design/go14generate Rob Pike,Go 生成:提案。
- design/dev.cc Russ Cox,dev.cc 分支计划,2014年11月
- design/go15bootstrap Russ Cox,Go 1.5 启动计划,2015年1月。
- doc/escape-analysis Dmitry Vyukov,Go 逃逸分析缺陷,2015年2月10日。
- design/execmodes Ian Lance Taylor,Go 执行模式,2015年8月(2016年1月更新)
- design/go17ssa Keith Randall,Go 编译器新的 SSA 后端。2015年2月10日。
- doc/compiler-optimization 编译器和运行时优化。
- issue/6853 所有:二进制文件太大且不断增长。
- design/go19inlining David Lazar, Austin Clements,提案:Go 编译器中内联中层堆栈。
- issue/19348 cmd/compile:允许中层堆栈内联
- talk/go19inliningtalk David Lazar,Go 编译器中层堆栈内联
- design/dwarf-inlining Than McIntosh,提案:在 Go 编译器中发出 DWARF 内联信息
- issue/22080 cmd/compile:生成 DWARF 内联信息
- issue/23109 cmd/compile:重写逃逸分析
- issue/27167 cmd/compile:重命名很多东西
- doc/renames 提案:Go 1.12 工具链重命名
- GOEXPERIMENT=checkptr
- issue/22218 提案:添加 GOEXPERIMENT=checkptr
- issue/34964 cmd/compile: 允许 -d=checkptr 作为 -race and/or -msan 的一部分?
- issue/34972 所有:通过 -d=checkptr 获取标准库构建
- discuss/checkptr
- issue/37121 运行时:在 Intel 中,未对齐的跳转造成性能下降
- issue/16798 提案:cmd/compile:仅为自递归添加尾部调用优化(已拒绝)
- issue/22624 提案:Go 2:添加 become 语句来支持尾部调用(已拒绝)
- design/64align Dan Scales,提案:在32位系统上使64位字段作为64位对齐,添加 //go:packed,//go:align 指令,2020年6月8日。
- issue/599 cmd/compile: 在32位系统上使64位字段作为64位对齐
- issue/36606 提案:cmd/compile: 在32位系统上使64位字段作为64位对齐,在结构体上添加 //go:packed,//go:align 指令
- issue/19057 提案:运行时:添加可用于提高对齐要求的 AlignedN 类型
- talk/gccgo
gccgo 的简要概述,“另一个” Go 编译器。2015年8月6日。
Summary:在本集中,来自 Google 核心 Go 语言团队的 Chris Manghane 简要概述了 gccgo,也称为“另一个 Go 编译器”。Gccgo 是一个 Go 编译器,利用 GCC 的强大功能进行编译和优化。它由 Ian Lance Taylor 编写并于 2009 年 11 月发布,并且仍然由他积极维护。 Manghane 解释说,之所以决定使用 C++ 并针对 GCC 来开发 gccgo,是因为 GCC 支持广泛的体系结构,并提供了代码分析、优化和生成方面的广泛功能。通过使用 GCC 作为编译器,可以促进技术诚实,因为它避免了对单一实现的依赖。此外,产品的多种实现有助于识别缺陷并改进设计。然而,gccgo 在实现与 go 编译器功能对等方面面临着挑战。它有一个过时的垃圾收集器,并且更新出现延迟。版本 1.4 对 C 运行时以及垃圾收集器期望类型信息的方式进行了更改。从分段堆栈到连续堆栈的转变也带来了挑战,因为当前的 C 编译器不支持堆栈刀的必要精确控制和使用。尽管面临这些挑战,gccgo 仍取得了重大改进,与 GCC 分离并提供了更大的灵活性。 LLVM 的实现带来了更高效的编译器。可移植本机客户端的使用允许在 Web 浏览器中运行本机代码,从而提高 Go 的采用率。 Manghane 强调了赶上 go 编译器并尝试泛型等功能的重要性。他还强调需要改进基本工具,特别是授权和书籍编译器。 最小化垃圾收集开销至关重要,并且提出了标记分析作为增强垃圾收集器性能的方法。最终目标是实现更高效、更通用的垃圾收集器。此外,语言的强大功能有可能改进二进制生成并激发 go 编译器的改进。
- issue/28262 cmd/compile:反馈导向优化
- discuss/reducing-gc-peak-memory 降低 gc 的峰值内存占用(golang-dev)
- discuss/bug-in-new-amd64 新 amd64 ABI 中的缺陷(golang-dev)
- issue/51225 cmd/compile:要求构建系统指定 -importcfg
- issue/18616 math/bits:整数位操作库
- issue/74299 运行时,cmd/compile:添加 runtime.freegc 和 runtime.freegcTracked 以减少 GC 工作(GOEXPERIMENT=runtimefreegc)
- issue/62737 cmd/compile:按 GC 形状合并临时变量与具名变量
- discuss/jump-tables-in-6a 6a 中的跳转表(golang-nuts)
- issue/61515 testing:添加用于迭代的 testing.B.Loop
- discuss/go-1-24-blooper Go 1.24 BLooper(golang-nuts)
- discuss/get-rid-of-stack 去掉栈检查序言(golang-nuts)
- discuss/fused-multiply-add 融合乘加?(golang-dev)
- discuss/rfc-go-assembly-for [RFC] ARM64 的 Go 汇编(golang-dev)
- discuss/x86-asm-source-of x86 汇编的唯一事实来源(golang-dev)
- issue/71105 cmd/compile:让 GORISCV64=rva20u64 包含压缩指令
- issue/61476 所有:添加 GORISCV64 环境变量
- issue/46229 所有:移植到 linux/loong64
- design/wasmexport Francesco Guardiani,提案:go:wasmexport 指令。2020年12月17日。
- issue/42372 提案:cmd/compile:go:wasmexport 指令
- issue/60072 cmd/go:添加 GOMIPS32、GOMIPS64 指令集级别(iii、r1、r2、r5、r6)
- issue/73787 simd/archsimd:在 GOEXPERIMENT 下提供架构相关的 SIMD 内建函数
- issue/79781 simd/archsimd:在 GOEXPERIMENT 下支持 ARM64 SVE SIMD 内建函数
- issue/78979 提案:simd/archsimd:默认启用 AMD64 架构相关的 SIMD
- issue/76473 simd:将底层 SIMD 包更名为 simd/archsimd(GOEXPERIMENT)
- issue/13241 cmd/compile:切换到新的导出格式
- issue/14473 cmd/compile:研究用切片替换 NodeList
- issue/15756 cmd/compile:并行化编译
- issue/22326 cmd/compile:规范示例中的包初始化顺序不正确
- issue/19683 cmd/compile:消除 base.Pos 和 ir.CurFunc
- issue/51691 cmd/compile:移除对“损坏”的 IR 和类型的支持
- issue/60234 cmd/compile:更新编译器自身的 PGO 配置文件
- issue/15734 cmd/go:导出数据就绪后立即构建依赖包
- issue/51734 cmd/compile:在 -p 成为必需后清理不再需要的代码路径
- issue/17583 cmd/compile:在 SSA 中插入写屏障
- issue/19361 cmd/compile:当接口背后的具体类型可静态确定时,对调用去虚拟化
- issue/33981 cmd/compile:提高逃逸分析的精度
- issue/15561 cmd/compile:支持内联不逃逸的闭包
- issue/30810 cmd/compile:重写 rulegen,使其不再直接生成纯文本 Go 代码
- issue/71359 cmd/compile:更好地跟踪接口转换和 make 中的字面量,以避免分配
- issue/8618 运行时:不逃逸的 interface{} 转换不应分配内存
- issue/61502 cmd/compile:全面改造内联器
- issue/78633 cmd/compile:进行按位常量折叠
- issue/5496 cmd/compile:将密集的纯整数 "switch" 编译为跳转表
- issue/34381 cmd/compile:对 switch 语句使用哈希
- issue/73137 testing:实现不阻止内联的 b.Loop keepalive(阻止内联可能导致堆分配)
- issue/71268 cmd/compile:优化:为 || 和 && 条件生成条件比较指令
- issue/75203 cmd/compile:将 reflect.TypeFor 内建化
- issue/80409 cmd/compile/internal/ssa:拆分为子包
- issue/10587 cmd/gc:栈分裂检查不符合现代 CPU 的静态分支预测规则
- issue/15365 cmd/compile:ARM SSA 支持
- issue/16358 cmd/compile:386 SSA 支持
- issue/16010 cmd/compile:PowerPC(LE)SSA 支持
- issue/16359 cmd/compile:MIPS64 的 SSA 后端
- issue/18892 所有:WebAssembly("wasm")支持
- issue/16357 cmd/compile:删除旧的编译器后端
- issue/27532 所有:移植到 RISC-V
- issue/44734 cmd/asm:重构 arm64 汇编器的框架
- issue/44549 cmd/asm,cmd/compile,cmd/link,cmd/objdump:ppc64 ISA 3.1 支持
- issue/20104 cmd/compile:将架构相关的重写规则和操作移入各架构自己的包
- issue/81819 simd:围绕可执行规范统一 API 生成
- design/bce 边界检查消除。
- discuss/checkptr Matthew Dempsky,master 分支已支持动态 unsafe 指针检查。golang-dev,2019年10月17日。
- doc/pgo-preview Michael Pratt,按配置文件优化(PGO)预览。2023年2月8日。
- doc/pgo Michael Pratt,Go 1.21 中的按配置文件优化(PGO)。2023年9月5日。
- doc/gotelemetry Robert Findley,Go 1.23 及以后的遥测。2024年9月3日。
- issue/67111 cmd/go:添加 go telemetry 子命令
- doc/allocation-optimizations Keith Randall,在栈上分配。2026年2月27日。
- doc/simd-experiment David Chase、Junyang Shao,Go 中与平台无关的 SIMD。2026年9月24日。
- doc/archsimd Junyang Shao、David Chase,Go 中特定于架构的 SIMD。2026年10月2日。
- talk/jin2022 Jin Lin,Go 编译器中的按配置文件优化。闪电演讲,GopherCon 2022,芝加哥。2022年10月。
- talk/jin2024 Jin Lin,用按配置文件优化自动提升效率。GopherCon 2024,芝加哥。2024年7月。
连接器
Ken Thompson 编写了 Go 连接器,Russ 在 Go 1.3 中进行了一些大修。Austin 和 keith, Than, Cheery 和其他人一起对连接器返工,将在 Go 1.15 和 Go 1.16 中发布
- design/go13linker Russ Cox,Go 1.3 连接器大修,2013年11月。
- design/go116linker Austin Clements,构建更好的 Go 连接器,2019年9月12日。
- issue/52209 cmd/compile,cmd/link:在编译器中生成 DWARF 类型信息
- design/go-dynamic-tls Alexander Musman,提案:Go 通用动态 TLS。2025年1月28日。
- issue/71953 提案:运行时:支持通用动态(general dynamic)线程局部存储模型
- issue/42681 build:将 GOEXPERIMENT 开关从 make.bash 移至 cmd/go
- discuss/do-we-document-the .gosymtab 与 .gopclntab 的历史,以及它们与 .symtab、.debug_line、.debug_frame 的区别,是否有文档记录?(golang-nuts)
- discuss/presence-of-pcln-table CGo 二进制文件中的 PCLN 表(golang-nuts)
- issue/62577 cmd/link,cmd/go:在 darwin 上生成拆分的 DWARF
- issue/4069 cmd/ld:为 Windows cgo 构建调用宿主连接器
- issue/11799 cmd/link:压缩调试信息
- issue/38485 运行时:基于 ARM 的 macOS 及其 GOOS/GOARCH 取值(跟踪问题)
- issue/36439 所有:移植到 Windows/arm64
- issue/25893 所有:移植到 AIX/ppc64
- issue/76038 cmd/link:重新整理编译器和连接器生成的数据,使其更清晰
- issue/67401 cmd/link:限制 linkname 今后的使用
- issue/26379 cmd/compile:考虑使用 DWARF 5
- issue/41004 cmd/link:支持自动生成 .note.gnu.build-id
- issue/68678 cmd/link:Go 连接器不生成 LC_UUID,导致 macOS 15 上无法访问本地网络
- issue/69536 crypto:获得 FIPS 140-3 认证
调试器
- doc/go13heapdump 堆转储 Go 1.3
- doc/go14heapdump 堆转储 Go 1.4
- doc/go15heapdump 堆转储 Go 1.5 到 堆转储 Go 1.7
- design/heap-viewer Michael Matloob,提案:Go 堆转储查看器,2016年7月20日。
- issue/16410 x/tools/cmd/heapdump:创建一个堆转储查看器
- design/profiler-labels Michael Matloob,提案:支持 pprof 探查器标签,2017年3月15日。
- issue/17280 pprof:添加探查器标签支持
- issue/36821 提案:runtime/pprof:添加基于 PMU 的剖析
- issue/53286 提案:runtime/pprof:扩展剖析配置以支持 perf 事件
- talk/derek2024 Derek Parker,十年调试。GopherCon 2024,芝加哥。2024年7月。
竞争检测器
- issue/42598 runtime: apparent false-positive race report for a buffered channel after CL 220419
- issue/44853 运行时:在 Go 中启用地址检测器(AddressSanitizer)
- discuss/enable-address-sanitizer-in 在 Go 中启用地址检测器(golang-dev)
- issue/64611 所有:添加 internal/asan 和 internal/msan 包
跟踪器
- design/go15trace Dmitry Vyukov,Go 执行跟踪器,2014年10月。
- design/tracefmt nduca@, dsinclair@,跟踪事件格式,2016年10月。
- design/execution-tracer-overhaul 执行跟踪器大修。
- issue/60773 runtime/trace:执行跟踪器大修
- issue/63185 runtime/trace:飞行记录(flight recording)
- issue/66703 runtime/trace:将 v2 跟踪器设为默认跟踪器
- doc/execution-traces-2024 Michael Knyszek,更强大的 Go 执行跟踪。2024年3月14日。
- doc/flight-recorder Carlos Amedee、Michael Knyszek,Go 1.25 中的飞行记录器。2025年9月26日。
- talk/felix2025 Felix Geisendörfer,用关键路径分析剖析请求延迟。GopherCon 2025,纽约。2025年8月。
锁分析
- issue/38029 x/build: linux-amd64-staticlockranking 持续失败。
- cl/192704 运行时:锁操作日志支持
- cl/207348 运行时:当运行 timer 时释放 timersLock
- cl/207846 运行时,在跟踪内存代码时避免潜在的死锁
- cl/207619 运行时:运行时的静态锁等级(通过 GOEXPERIMENT 开启)
- cl/222925 cmd/go: 为任何已启用的 GOEXPERIMENT 定义构建标志
- cl/228417 运行时:将 Gscan 的合并/释放合并到锁排名顺序中
- cl/229480 运行时:添加几个新的 lock-rank partial order edges
- cl/231463 运行时:添加一个额外的 lock ranking partial edge
- cl/233599 运行时:添加 partial order edge 的锁(assistQueue -> mspanSpecial)
- cl/236137 运行时:为锁排名3个新的 partial orders
- issue/40677 运行时:锁保持检查
构建器
- design/go13nacl Russ Cox,Go 1.3 本地客户端支持。2013年10月。
- design/gobuilder Brad Fitzpatrick,Go 构建计划。2014年9月3日。
- discuss/gobuilder 构建器运行的变更
- design/go14android David Crawshaw,Go 支持安卓。2014年6月。
- design/go-generate Rob Pike,Go 生成,2014年1月。
- issue/13560 提案:构建:定义识别机器生成的文件的标准方式。
- discuss/generatedcode Rob Pike 的关于 Issue 13560 的最终意见。
- design/goenv Russ Cox,提案:Go 命令行配置文件。2019年3月1日。
- issue/30411 proposal: cmd/go: 添加
go env -w设置默认环境变量
- issue/30411 proposal: cmd/go: 添加
- design/go116build Russ Cox,防 Bug 构建约束——设计草稿。2020年6月30日。
- issue/41184 cmd/go: 持续交流防 Bug //go:build
- Windows
- issue/41191 工具链指令
- discuss/win2000-golang-nuts 反对删除对 Windows 2000(x86-32)的支持
- design/wasm Richard Musiol,Go WebAssembly 的架构。2018年2月28日。
- design/wasm2 WebAssembly 程序文件
- issue/57631 构建:主版本号的第三位使用零,例如 'go1.21.0'
- issue/54265 构建:采用 Go 1.20 作为 Go 1.22 的引导工具链
- issue/69315 构建:采用 Go 1.24 作为 Go 1.26 的引导工具链
- doc/rebuild Russ Cox,完全可重现、可验证的 Go 工具链。2023年8月28日。
- issue/57179 cmd/go:在加载用户 go.env 之前加载 $GOROOT/go.env
- issue/59719 cmd/go:添加 GOEXPERIMENT=cacheprog,让子进程实现内部的动作/输出缓存
- issue/64876 cmd/go:默认启用 GOCACHEPROG
- issue/62067 cmd/go:go build -json
- issue/38248 cmd/compile:用 go:wasmimport 指令替代 CallImport
- issue/58141 所有:添加 GOOS=wasip1 GOARCH=wasm 移植
- doc/wasi Johan Brandhorst-Satzkorn、Julien Fabre、Damian Gryski、Evan Phoenix、Achille Roussel,Go 对 WASI 的支持。2023年9月13日。
- issue/65199 cmd/compile:添加 go:wasmexport 指令
- design/wasmexport-notes Achille Roussel,go:wasmexport 实现笔记。
- doc/wasmexport Cherry Mui,用 Go 编写可扩展的 Wasm 应用。2025年2月13日。
- talk/johan2023 Johan Brandhorst-Satzkorn,Go 对 WASI/Wasm 的支持。闪电演讲,GopherCon 2023,圣迭戈。2023年9月。
模块
- design/go-dep Go 打包的建议流程
- design/go-dep2 依赖管理工具
- doc/go-dep Sam Boyer,Go 依赖管理事迹。2016年12月13日。
- talk/go-dep
GopherCon 2017:Sam Boyer,Go 依赖管理的新时代。2017年7月24日。
Summary:在 GopherCon 2017 题为“Go 包管理的新时代”的一集中,Sam Boyer 讨论了包管理在软件开发中的重要性以及向官方工具的过渡。他强调软件生态系统需要一种通用语言来有效共享代码并改善协作。 Boyer 承认 Go 编程中依赖管理的挑战,例如缺乏对发布的重视以及与 go get 工具的潜在冲突。然而,他强调了 Go 社区在处理依赖关系时的谨慎和深思熟虑的文化。人们开发了各种工具(包括 Goep、Glide 和 GB)来解决再现性和版本控制问题。 2015 年供应商目录的引入改进了依赖管理,但也带来了新的挑战。为了解决这些问题,成立了一个委员会,并引入了 GitHub Depp 作为依赖管理的官方实验。 Depp 严重依赖社区参与,并遵循使用 Toml 文件声明规则和约束的双文件系统。它生成一个锁定文件以实现可重复性并遵循语义版本控制。 Boyer 还提到了 Digby,这是一个包管理 gopher,旨在将相关行为集成到工具链中。 Go 工具链的开发涉及实验和映射,以确保清晰的过渡。博耶强调社区参与和支持对于这些工具的成功的重要性。总的来说,Go 编程语言提供了有效的依赖管理工具,并将其成功归功于社区的贡献和支持。
- talk/go-dep-design
dotGo 2017:sam boyer, 依赖的功能设计。2017年12月8日。
Summary:在 dotGo 2017 的这一集中,Sam Boyer 讨论了 dep(Go 的依赖管理工具)背后的功能设计原则。尽管 Go 不是一种函数式语言,但 Boyer 演示了如何利用函数式编程的原理来设计高效且有效的 Go 程序。 Boyer 探索的一个关键概念是记忆化,这是一种通过缓存结果来提高函数性能的技术。他解释了如何将记忆化应用于斐波那契数列,从而减少函数调用次数并缩短计算时间。通过存储先前计算的值,函数的时间复杂度降低至 O(n)。 Boyer 强调了记忆在避免不必要的工作方面的相关性,并强调了 dep Ensure 作为代码中的关键功能。 Boyer 还深入研究了 Go 中的依赖管理主题。他解释说,依赖关系管理器将项目源代码映射到其依赖关系,添加元数据来描述所需的源。他讨论了依赖项“应该”的两个概念:更宽松的约束和更严格的可重现构建。 Go 使用静态分析将项目源映射到清单,项目源、清单和锁定文件之间的关系至关重要。 Boyer 解释了深度模型如何分析 import 语句并使用 go 包 Tommo 创建锁并填充供应商目录。总的来说,博耶强调了设计具有有效输入和输出的透明且无错误的系统的重要性。他建议探索不同的编程模型,例如函数式编程和参与者模型,可以带来创新且有益的系统。 通过应用函数式编程的原理,即使在像 Go 这样的非函数式语言中,开发人员也可以创建更高效、更有效的程序。
- discuss/go-dep
Russ Cox,Jess Frazelle, Sam Boyer, Pete Garcin,构建时添加可预测性。2018年2月22日。
Summary:在“在管道中构建可预测性”一集中,ActiveState 的 Pete Garcin、Stripe 的 Sam Boyer、Google 的 Russ Cox 和 Microsoft 的 Jess Frazelle 讨论了与可重复构建、环境配置和依赖项管理相关的挑战和解决方案。依赖管理一直是软件开发中长期存在的问题,但 Go 通过代码托管站点导入路径和供应商目录的引入进行了改进。以供应商目录为中心的工具(例如 DEP)已在生产中广泛使用。然而,有关其使用情况的更新数据的可用性是有限的。语义版本的采用以及对清晰文档和用户友好界面的需求是持续改进的领域。在构建管道中实施依赖管理已经为 Kubernetes 等大型项目带来了显着的改进。 Vigo 是一个新工具,为 Go 编程中的包管理提供了替代解决方案,已被证明是高效的并且能够处理复杂的环境。然而,在 Kubernetes 中使用符号链接引起了一些问题。 Vigo 正在获得关注并被大型项目采用。可重复的构建确保应用程序部署的一致性,而容器化通过为应用程序部署提供一致的环境来提供解决方案。过渡到容器有好处,例如更容易更新和维护,但需要努力改变工作流程和特定工具以与 CI/CD 流程集成。优化容器镜像和减少依赖性对于性能至关重要。语言包管理器在软件开发中起着至关重要的作用,验证步骤可确保完整性。 对系统的代理支持是一个挑战,因为公司希望确保包的稳定性和安全性。目前正在进行的工作是改进工具和验证方法,微软的开源团队也参与了开发过程。 Go 语言的采用面临着挑战,因为它被认为是一种前沿技术。为了解决这个问题,我们正在进行更改以引入包管理和版本控制,这对于可重复构建和兼容性至关重要。在实施这些更改之前,收集社区反馈至关重要,并且很快将启动正式的 Go 提案。总体而言,专家们强调了可重复构建、清晰的文档、用户友好的界面和社区参与的重要性,以克服采用 Go 的挑战并确保软件开发流程的可预测性。
- design/vgo Russ Cox,提案:Go 模块版本化。2018年3月20日。
- issue/24301 cmd/go: 像 Go 工具链添加包版本支持。
- doc/deps Russ Cox,我们的软件依赖问题。2019年1月23日。
- doc/vgo Russ Cox,Go 和版本化。
- discuss/groups-gomod Go 模块化来了。
- discuss/go-dep-response Reddit 讨论。
- doc/go-dep-response Peter Bourgon,关于 dep 和 vgo 的回应。2018年7月27日。
- discuss/go-dep-response2 黑客新闻:关于 dep 和 vgo 的回应。
- discuss/go-dep-twitter Russ Cox 的推特风暴。
- design/sumdb Russ Cox, Filippo Valsorda,提案:公共 Go 模块生态的安全性。2019年4月24日。
- issue/25530 提案:cmd/go: 透明日志的安全版本。
- issue/23966 为什么 go.mod 要定制语法?
- design/lazy-gomod Bryan C. Mills,提案:模块的延迟加载。2020年2月20日。
- issue/45713 提案:cmd/go: 添加工作区模式
- design/workspace 提案:cmd/go 多模块工作区
- doc/vuln Julie Qiu,Go 的漏洞管理。2022年9月6日。
- doc/govulncheck Julie Qiu,Govulncheck v1.0.0 发布了!2023年7月13日。
- discuss/60696 Michael Matloob,cmd/go:添加包转发。2023年6月8日。
- discuss/61669 Russ Cox,gonew:新模块的模板。2023年7月31日。
- doc/gonew Cameron Balahan,试验项目模板。2023年7月31日。
- issue/48429 cmd/go:在 go.mod 中跟踪工具依赖
- design/x-repo-continuous-go Dmitri Shuralyov,提案:所有、x/build/cmd/relui:自动维护 golang.org/x 仓库中的 go 指令。2024年8月27日。
- doc/pkgsite-api Ethan Lee、Hana Kim、Jonathan Amsterdam,pkg.go.dev API 介绍。2026年5月21日。
gopls
- design/gopls-workspace Heschi Kreinick, Rebecca Stambler,提案:多项目 gopls 工作区,2020年3月9日。
- doc/gopls-scalability Robert Findley、Alan Donovan,为不断壮大的 Go 生态扩展 gopls。2023年9月8日。
- issue/63501 x/tools/cmd/deadcode:添加新命令
- doc/deadcode Alan Donovan,用 deadcode 找出不可达的函数。2023年12月12日。
- issue/61324 x/tools/go/analysis/checker:基于 go/packages 的可导入分析驱动
- issue/32816 cmd/fix:自动迁移简单的弃用
- issue/73605 cmd/fix:移除所有功能
- issue/71859 cmd/go:fix:应用现代化器(modernizer)、内联和其他分析器给出的修复
- doc/gofix Alan Donovan,使用 go fix 使 Go 代码现代化。2026年2月17日。
- doc/inliner Alan Donovan,//go:fix inline 与源码级内联器。2026年3月10日。
- design/lsp-interactive-refactoring Hongxiang Jiang,提案:语言服务器协议(LSP)的交互式代码操作。2026年7月16日。
- doc/interactive-refactoring Hongxiang Jiang,gopls 中的交互式重构。2026年10月16日。
测试,x/perf
- design/subtests Marcel van Lohuizen,测试:计划中的子测试和子基准测试支持。2015年9月2日。
- issue/12166 测试:计划中的子测试和子基准测试支持。
- design/gotest-bench Russ Cox, Austin Clements,提案:Go 基准测试数据格式。2016年2月。
- issue/14313 cmd/go: 决定,标准基准数据格式的文档。
- issue/20875 测试:考虑在基准测试时减少调用 ReadmemStats
- issue/27217 测试:带有 StopTimer 的小型基准测试永久运行。
- issue/41637 测试:基准测试迭代报告错误。
- issue/41641 测出:中断计时器时基准测试不一致。
- design/gotest-json Nodir Turakulov,提案:go test 的 -json 标记。
- design/testing-helper Caleb Spare,提案:测试:用 TB.Helper 更好地支持测试帮助程序。2016年12月27日。
- issue/4899 测试:添加 t.Helper 让 file:line 的结果更好用。
- design/fuzzing Katie Hockman,设计草案:模糊测试的起步。
- issue/43744 测试:基准测试单元属性
- issue/48803 所有:Go 编译/运行时性能监控系统。
- issue/49121 x/perf/storage:支持 postgresql。
- design/revamp-code-coverage Than McIntosh,提案:将代码覆盖率测试扩展到应用程序。2022年3月2日。
- issue/51430 cmd/cover:将覆盖率测试扩展到应用程序
- doc/integration-test-coverage Than McIntosh,Go 集成测试的代码覆盖率。2023年3月8日。
- doc/synctest Damien Neil,用 testing/synctest 测试并发代码。2025年2月19日。
- doc/testing-b-loop Junyang Shao,用 testing.B.Loop 让基准测试更可预测。2025年4月2日。
- issue/73567 testing/synctest:用 Test 替代 Run
- doc/testing-time Damien Neil,测试时间(以及其他异步性)。2025年8月26日。
- issue/71287 testing:保存测试产物