Lobsters | 📄 原文链接 | 2026-10-06 收录

改造 Go 编译器以高效完成 IPv4 到 IPv6 映射

来源:vincent.bernat.ch — 2026-10-04

📋 概述

Vincent Bernat 探讨如何让 Go 高效地把 IPv4 地址映射为 IPv4-mapped IPv6 地址。netip.Addr 提供了 Unmap(),却缺少反向的 Map() 或 To6();维护者拒绝新增该方法,理由是用户应当写 netip.AddrFrom16(ip.As16()) 并让编译器去优化——而这一模式目前比原生方法慢约 8 倍。文章比较了三条路径:改标准库、写 helper、用 unsafe 操作内存布局,然后深入 Go 编译器,试图教会它把这个序列优化掉,并用反汇编与基准测试展示“用螺丝刀”为何比“用锤子”更合适。

🔑 核心要点

💡 金句

这样的方法实现起来很简单,但 Go 维护者拒绝了它,理由是用户应当写 netip.AddrFrom16(ip.As16()) 并让编译器去优化。而今天,这个模式比原生方法慢八倍。
← 返回 Lobsters 首页