标准库
syscall
- design/go14syscall syscal 包。
- issue/68595 syscall:在 Linux 上支持使用 Landlock 进行进程沙箱隔离
os, io, io/fs, embed
Go 1.16 中,对新的 os/fs 包进行了大量返工和改进。 design/draft-iofs Russ Cox, Rob Pike,Go 文件系统接口——设计草案。2020年7月。
- issue/13473 提案:os: Stdin, Stdout 和 Stderr 应该是接口
- issue/14106 提案:os:File 应该是接口
- issue/19660 提案: 将 io/ioutil 重命名为 io/fileio 或类似名字
- issue/40025 提案: io/ioutil: 移动 Discard, NopCloser, ReadAll 到 io
- issue/42027 提案: path/filepath: 添加 WalkDir (使用 DirEntry 浏览)
- issue/41190 io/fs: 添加文件系统接口
- issue/41467 os: 为轻量级目录查询添加 ReadDir 方法。
- issue/41974 提案: io/fs, filepath: 添加高效的浏览替代方案。
- issue/42026 提案: os: 添加 ReadDir, ReadFile, WriteFile, CreateTemp, MkdirTemp,以及反对 io/ioutil
- issue/43223 提案: io/fs, net/http: 定义自动 ETag 服务的接口
- design/go116embed Russ 和 Braid,嵌入文件。
- issue/41191 embed, cmd/go: 添加嵌入文件的支持
- issue/42321 embed: 在 embed.FS 文档中应该加入警告,说明包含点文件
- issue/42328 提案: cmd/go: 在使用
//go:embed时避免包含隐藏文件 - issue/43216 提案: embed: 删除在本地变量上对嵌入指令的支持
- issue/43217 提案: embed: 定义 String 和 Bytes 类型别名时必须使用
//go:embed - issue/43218 embed: 对 string, []byte 讨论的决定
- issue/44166 io/fs,os: 使用 os.DirFS 的 fs.ReadDir 会造成错误的路径
- issue/42322 io/fs: 添加函数
Sub(fsys FS, dir string) FS
- issue/56219 path/filepath:添加 IsLocal
- issue/57151 path/filepath:添加 Localize,将斜杠分隔的路径安全地转换为操作系统路径
- issue/54898 archive/zip:添加 (*Writer).AddFS
- issue/62484 os:添加 CopyFS
- issue/67002 os:更安全的文件打开函数
- doc/osroot Damien Neil,防目录遍历的文件 API。2025年3月12日。
go/*
- doc/gotypes Alan Donovan. go/types: Go 类型检查器
- talk/gotypes Alan Donovan. 使用 go/types 作为代码理解和重构工具。2015年12月2日。
- design/modular-interface Alan Donovan. 提案:用于Go模块化静态分析的通用接口。2018年9月9日。
- cl/134935 go/analysis: 分析工具的新的应用接口
- issue/62039 go/version:处理 Go 版本字符串的包
sync
- design/percpu-sharded Sanjay Menakuru. 提案:percpu.Sharded,一个用来减少缓存竞争的应用接口。2018年6月12日。
- issue/18802 提案:sync: 支持分片值
- issue/37142 sync: sync 包里的收缩类型
Map
- issue/21031 sync: 减少 map 里的指针开销
- issue/21032 sync: 用存储新键值来减少 (*map).Load 的损失
- issue/21035 sync: 通过新的不相交的键来减少Map操作间的竞争
- issue/37033 运行时:提供集中的工具来管理 go/cgo 的指针句柄
Pool
- discuss/add-pool gc-aware 池耗尽策略
- issue/4720 sync:添加池类型,2013年1月28日。
- cl/46010043 sync: 缩放池,2014年1月24日。
- cl/86020043 sync: 池里减少激进的本地缓存,2014年4月14日。
- cl/162980043 sync: 在第二次和之后的GC期间释放池内存,2014年10月22日。
- issue/8979 sync: 在GC期间池没有释放内存。
- issue/22331 运行时:池清理导致 STW1 时间过长。
- issue/22950 sync: 避免每次GC都清理全部池。
- issue/24479 sync: 在池操作里去除全部 Mutex。
- discuss/pool-draining Russ Cox,感知 GC 的池清空策略。golang-dev,2013年11月27日。
Mutex, RWMutex
- cl/4631059 运行时:替换 Semacquire/Semrelease 实现。
- issue/9201 提案:同步:禁止解锁不同 goroutine 的 mutex。
- issue/13086 运行时:在重复睡眠获取失败后回退到公平锁。
- cl/34310 sync: 让 Mutex 更公平。
- issue/17973 sync: RWMutex 无法随 CPU 数量扩展。
- cl/215361 sync: 实现能够避免缓存竞争的 RWMutex 版本。
Groups
- cl/134395 errgroup: 重新考虑并发模式。
- cl/131815 errgroup: 句柄运行时。从子 goroutine 进行 Goexit。
- issue/15758 testing: 同时使用 T.FatalX 和 T.SkipX 时应该提示错误。
- issue/25448 提案:将
panic(nil)改为非空的panic值。
atomic
- issue/8739 runtime,sync/atomic: 统一 runtime/internal/atomic 和 sync/atomic 的应用接口。
- issue/20164 提案: atomic: 添加
(*Value).Swap - discuss/atomic-value
- issue/36606 提案: cmd/compile: 让64位字段在32位系统上对齐为64位,在结构上添加
//go:packed指令 - issue/37262 运行时:在32位架构上不能原子性地访问 tiny-allocated 结构的第一个字。
time
- design/monotonic-time Russ Cox,提案:Go 中单调经过的时间跨度。2017年1月26日。
- issue/12914 time: 使用单调时钟测量经过的时间
- 可扩展的计时器
- cl/34784 运行时:在多 CPU 系统上的计时器可扩展性。
- issue/6239 运行时:让计时器更快。
- issue/15133 运行时:计时器无法在有大量计时器的多CPU系统上扩展。
- issue/27707 time: 当使用 Ticker 和 Sleep 时CPU使用率过高。
- 后续的延迟讨论
- issue/18023 运行时:使用 runtime.LockOSThread 意外会大幅减慢。
- issue/25471 time: 需要大约7次 syscall 才会睡眠。
- issue/38070 运行时:因为抢占点导致计时器自己死锁。
- issue/36298 net: mac 上的 1.14 版本性能减弱。
- issue/38860 运行时:CPU 限制 goroutine 导致不必要的计时器延迟。
- issue/44343 运行时:time.Sleep 比预计时间更长
- issue/44868 time, runtime: 零间隔的计时器需要2分钟才能启动。
context
- issue/8082 提案:规范:通过接口的定义而不是包和名字来表示接口。
- issue/14660 提案:context: 标准库的新包。
- issue/16209 提案:放宽名称不同但实际相同的接口的分配规则。
- issue/20280 提案: io: 向 Reader 等添加 Context 参数。
- issue/21355 提案:让 Context 使用本地 goroutine 存储
- issue/24050 testing: 在1.10上使用子进程测试有时会挂住。
- issue/27982 提案: Go 2: 加入协作式 goroutine 取消机制
- issue/28342 提案: Go 2: 更新 context 包
- issue/29011 提案: Go 2: 使用结构化的并发
- doc/context-go-away Michal Štrba,Go 2 应该取消 Context,2017年8月6日。
- doc/context Go 并发模式: Context。
- doc/context-isnt-for-cancellation Dave Cheney,Context 不适用取消。
- issue/42564 context: cancelCtx 独占锁导致极端的竞争。
encoding
- design/go12encoding Russ Cox,Go 1.2里的 encoding,TextMarshaler 和 TextUnmarshaler,2013年7月。
- design/go12xml Russ Cox,Go 1.2 里的 xml.Marshaler 和 Unmarshaler,2013年7月。
- design/natural-xml Sam Whited,提案: 原生 XML. 2016年9月27日。
- issue/13504 encoding/xml: 添加 XML 数据的通用表现形式。
- design/zip Russ Cox,提案:基于 Zip 的 Go 包存档,2016年2月。
- issue/14386 提案:在 .a 和 .o 文件中使用 zip 格式。
- design/xmlstream Sam Whited,建议:XML 流。2017年3月9日。
- issue/19480 encoding/xml: 从 TokenReader 添加解码,启用流转换器。
- design/raw-xml Sam Whited,提案:原始 XML 令牌,2018年9月1日。
- issue/26756 提案: encoding/xml: 添加 RawXML 令牌。
- doc/jsonv2-exp Joe Tsai、Daniel Martí、Johan Brandhorst-Satzkorn、Roger Peppe、Chris Hines、Damien Neil,一个新的实验性 Go JSON API。2025年9月9日。
- talk/joe2023 Joe Tsai,Go 中 JSON 的未来。GopherCon 2023,圣迭戈。2023年9月。
image, x/image
以下的讨论关于颜色管理和图片标准库。现在,Go图片库不会在编码和解码期间读取或写入元信息。因此,在处理图片时(例如在非线性 sRGB 空间中缩放),颜色可能出错。通用解决方案是设计图片元数据API,来识别编码图片文件中的颜色配置文件。
- issue/11420 x/image/draw: 颜色空间校正插值
- issue/20613 image/png: 不要忽略 PNG gAMA块
- issue/27830 提案: image: 解码选项
- cl/253497 x/image/draw: 伽玛校正非线性插值
- issue/37188 image/color: 文档没有包含指向颜色理论资源的链接
- issue/33457 提案: image: 添加对 jpeg、gif、png 的通用元数据支持
- discuss/image-metadata image.Metadata 接口类型
- issue/18365 image/png: 不支持设计和检索 PPI/DPI
- cl/208559 image: 新的元数据感知读写API
- cl/216799 image: 元数据API草图
- issue/44808 image, image/draw: 添加直接使用 RGBA64 的接口
- issue/46395 image/draw: 如果掩码是 *image.Alpha,通过使用特殊情况来提升性能。
Mobile
- design/go14android David Crawshaw,Go 支持安卓,2014年6月。
- design/gobind David Crawshaw,绑定Go和Java,2014年7月。
log
- discussion/54763 讨论:结构化、分级的日志
- design/structured-logging 提案:结构化日志
- issue/56345 提案:log/slog:结构化、分级的日志
- issue/58243 log/slog:让日志记录器方便地获取当前 context
- issue/59928 提案:testing:添加 log/slog 支持
- doc/slog Jonathan Amsterdam,用 slog 进行结构化日志记录。2023年8月22日。
- issue/62005 log/slog:添加
slog.DiscardHandler
net, net/http
- discuss/47323 Russ Cox,提案:net/netaddr:添加新的 IP 地址类型和 netaddr 包(讨论)。2021年7月21日。
- issue/56539 net:支持 MPTCP
- discuss/60227 Jonathan Amsterdam,net/http:为 ServeMux 模式添加方法和路径变量。2023年5月16日。
- issue/61410 net/http:增强的 ServeMux 路由
- doc/routing-enhancements Jonathan Amsterdam,Go 1.22 的路由增强。2024年2月13日。
- issue/66405 net/http:在 Request 中暴露匹配到的模式
- discuss/60746 Damien Neil,net/http:将 HTTP/2 移入标准库。2023年6月12日。
- issue/67813 net/http:HTTP/2 配置 API
- issue/73626 net/http:添加 CrossOriginForgeryHandler
- issue/75772 net/http:客户端连接 API
- doc/http-connection-reuse Nicholas Husin、Damien Neil,更好的 HTTP/1 连接复用。2026年10月14日。
- issue/58547 x/net/quic:添加 QUIC 实现
crypto
- issue/66821 crypto/rand:读取随机数出错时让进程崩溃
- issue/67057 crypto/rand:添加函数 Text
- issue/61477 crypto/hkdf:添加包
- issue/69488 crypto/pbkdf2:添加包
- issue/63369 crypto/tls:在客户端支持加密的 Client Hello(ECH)
- issue/70122 crypto/mlkem:新包
- issue/75300 crypto/hpke:新包
- issue/77626 crypto/mldsa:新包
- issue/70123 crypto:启用 FIPS 模式的机制
- issue/70200 cmd/go:添加 fips140 模块选择机制
- doc/tob-crypto-audit Roland Shoemaker、Filippo Valsorda,Go 密码学安全审计。2025年5月19日。
- doc/fips140 Filippo Valsorda (Geomys)、Daniel McCarney (Geomys)、Roland Shoemaker (Google),FIPS 140-3 Go 密码模块。2025年7月15日。
- design/crypto-ssh-v2 Nicola Murino、Filippo Valsorda,x/crypto/ssh/v2。2024年8月19日。
misc
- design/mobile-audio Jaana Burcu Dogan,提案:手机音频。2015年11月30日。
- issue/13432 提案: x/mobile 音频
- design/localization Marcel van Lohuizen,提案:Go 本地化支持。2016年1月28日。
- issue/12750 x/text: 本地化支持
- design/unbounded-queue Christian Petrin,提案:内置高性能无界队列。2018年10月2日。
- issue/27935 提案: 添加 container/queue
- design/lockfile Adrien Delorme,公开内部的锁定文件包
- design/cidr Rudi Kramer, James Forrest,在 no_proxy 变量中添加对CIDR表示法的支持。2017年7月10日。
- issue/16704 net/http: 考虑在 no_proxy 环境变量添加 CIDR 表示法
- design/dns Sam Whited,提案:基于DNS的虚导入。2018年6月30日。
- issue/26160 提案:将 DNS 文本记录用于虚导入路径
- issue/60204 cmp:添加 Or
- issue/60088 reflect:添加 TypeFor
- issue/60370 database/sql:添加泛型的 Null[T]
- issue/66408 structs:添加 HostLayout “指令”类型
- issue/54670 hash/maphash:添加函数 Comparable
- issue/70471 hash/maphash:标准化哈希函数
- issue/69264 x/exp/stats:包含 Mean、Median 等函数的新包
- issue/62026 uuid:添加生成和解析 UUID 的 API