Go 1.26 来了!new语法爽翻天,绿茶GC默认开启,goroutine能查死锁!


Go 1.26 于2026年2月发布,带来语言级新特性、全新“绿茶”垃圾回收器、go fix 现代化重构、goroutine 泄漏检测实验功能及多项标准库增强。

2026年2月,Go语言迎来了1.26版本的正式发布,这个时间点距离上一个版本1.25刚好过去六个月,就像 clockwork 一样精准。

Go团队这次依旧保持着他们那种低调但扎实的作风,没有搞什么花里胡哨的大新闻,而是把功夫下在了 toolchain 工具链、runtime 运行时和 libraries 标准库这些真正影响你每天写代码体验的地方。这种务实的态度特别让人安心,就像你知道楼下那家开了二十年的早餐店,虽然装修不fancy,但煎饼果子永远好吃。

这次发布最核心的承诺依然是 Go 1 兼容性保证,这意味着你几乎不需要修改任何代码,现有的程序就能直接编译运行!你可以放心地把生产环境升级到1.26。



语言层面:new 函数终于能干点人事了!

先说说语言层面的变化,这次有两个重磅更新直接让你的代码写起来更爽。

1、new函数终于开窍了!
第一个是关于 built-in 内置函数 new 的改动,这个从Go诞生就存在的函数现在终于允许传入表达式而不仅仅是类型了。

以前你要创建一个指针变量,得先定义一个临时变量然后取地址,那种写法就像穿着西装打领带却穿着拖鞋,总感觉哪里不对劲。现在你可以直接写 new(yearsSince(born)) 这种表达式,编译器会帮你搞定一切,代码读起来流畅得像在写Python。

以前用 Go 写 JSON 结构体,要是某个字段可选,比如年龄(Age),就得定义成 *int 指针类型。但你想初始化一个带默认值的 Age,就得先声明变量再取地址,啰嗦得要命:

go
age := yearsSince(born)
p := Person{Name: name, Age: &age}

现在?Go 1.26 直接让你在 new 里塞表达式!看好了:

go
Age: new(yearsSince(born))

就这么一行,干净利落,像极了你妈给你夹菜——不用你开口,她就知道你要吃肉。这个改动看似小,实则大快人心。

这个特性在处理序列化包的时候简直是救星:和 encoding/json、protocol buffers 这些序列化库配合时,再也不用为了一个可选字段多写三行临时变量。比如你在用 encoding/json 处理API响应,有些字段是 optional 可选的,用指针来表示 nil 值。以前你得写好几行代码来构造这个结构体,现在一行就能搞定!

种语法糖虽然小,但用多了累积起来的幸福感很可观,就像你每天通勤路上省下的十分钟,一年下来就是六十个小时。

Go 团队终于意识到:程序员的时间很贵,别让我们在取地址上浪费生命!


2、泛型也松绑了!
第二个语言层面的改动是关于泛型的自引用约束,这个听起来很学术化,但实际上解决了一个很实在的痛点。


以前你写一个泛型接口 Adder[A Adder[A]],Adder 这种要求类型自己能相加的接口,编译器会直接报错,说“你不能自己引用自己”。类型参数列表里不能引用正在被定义的类型本身,这种限制就像你想自我介绍却说不出自己的名字一样别扭。

现在?随便引!只要逻辑自洽,Go 1.26 就认。Go 1.26解除了这个限制,你可以写 type Adder[A Adder[A]] interface 这种自引用的定义,类型系统终于允许你玩这种递归的花活了。

这就像你终于可以合法地给自己颁“最佳员工奖”——只要公司章程允许,你就配!这种自引用泛型让约束更强大,也让类型系统更灵活。以后写高阶抽象,不用再绕地球三圈找替代方案了。

这个改动让一些复杂的数据结构和算法实现变得可能,比如在实现某些数学库或者图算法的时候,你可以更精确地表达类型约束。

虽然大部分业务代码可能用不到这么高级的特性,但对于那些写基础库的硬核开发者来说,这就像是给他们的工具箱里添了一把瑞士军刀。而且这次改动还简化了类型参数的规则,spec 规范变得更简洁,这种化繁为简的能力正是Go语言设计的精髓所在。



工具链大改造:go fix 从古董变成神器,go mod init 学会低调做人

工具链方面的改进这次特别给力,首先是 go fix 命令的彻底重写。

还记得那个尘封多年的 go fix 吗?以前它像个古董收音机,只能播放上世纪的修复规则。
这个命令以前就像你爷爷辈用的工具,里面的 fixers 修复器都是 过时的,基本上没人用。

现在Go团队把它改造成了 “Go 代码现代化工厂”,提供了一键升级代码库到最新惯用写法的可靠方式。


现在,go fix 基于和 go vet 一样的分析框架,不仅能诊断问题,还能一键修复。
比如你还在用老式 API?你只需要运行 go fix,它就能自动帮你把老代码改成新写法,这种体验就像请了个免费的代码重构专家;
你写了冗余代码?它帮你删掉;
甚至你自定义的 //go:fix inline 指令,它都能识别并执行。


举个例子,假设你有个旧函数叫 OldAPI(),现在官方推荐 NewAPI()。你只需在 OldAPI 的注释里加一行:

go
//go:fix replace OldAPI with NewAPI

然后运行 go fix,所有调用 OldAPI 的地方全变成 NewAPI!这哪是工具?这是你的私人代码助理,还不要工资!

新版的 go fix 包含了几十个 fixers,能帮你利用Go语言和标准库的最新特性。

更牛的是它还内置了 source-level inliner 源代码级内联器,你可以通过 //go:fix inline 指令标记自己的函数,让工具自动帮你做API迁移。
这种设计特别贴心,因为大型项目里总有那种自己封装的工具函数,以前升级的时候得手动改几百个调用点,现在一行注释就能搞定。而且这些修复器保证不会改变程序的行为,如果出了问题你可以直接报bug,这种 confidence 来自于它和 go vet 共用同一个 Go analysis 分析框架。

go mod init 的行为也有调整,现在创建新模块时会默认使用更低的Go版本。如果你用 1.N.X 版本的工具链运行 go mod init,生成的 go.mod 文件会指定 go 1.(N-1).0 版本,预发布版本甚至会指定 go 1.(N-2).0。这个改动的目的是鼓励创建与当前支持的Go版本兼容的模块,毕竟Go的兼容性保证意味着旧版本编译器也能运行新代码。如果你想要特定的版本,后面再运行 go get go@version 就能调整,这种灵活性和规范性的平衡做得恰到好处。

cmd/doc 和 go tool doc 这两个命令被删除了,统一用 go doc 替代。这个改动很Go风格,不搞重复建设,一个命令能干的事绝不用两个。go doc 完全兼容原来的参数和行为,你只需要改改 muscle memory 肌肉记忆,以后敲命令的时候少几个字符,长远来看也是省下了不少键盘磨损。



运性能怪兽绿茶Green Tea GC正式上线,默认开启!

运行时层面的改进是这次发布的重头戏,首先是 Green Tea 垃圾回收器的默认启用。这个在Go 1.25还是实验特性的 GC 现在正式转正,成为了默认的垃圾回收器。

如果说 Go 之前的垃圾回收器是个勤恳的老黄牛,那 Go 1.26 的“绿茶”(Green Tea GC)就是骑着电驴送外卖的小哥——又快又准还省电!这个 GC 在 Go 1.25 还是实验品,现在直接扶正。

它通过优化小对象的标记和扫描策略,提升 CPU 利用率和内存局部性。著提升了小对象的标记和扫描性能。
在重度使用GC的真实程序中,垃圾回收开销能减少10%到40%,如果你用的是 Intel Ice Lake 或 AMD Zen 4 之后的新 CPU,还能额外榨出 10% 性能——因为它会自动用上 SIMD 向量指令扫内存,相当于扫地机器人升级了激光雷达。

Green Tea GC 的核心创新在于把扫描的基本单位从单个对象改成了更大的内存块,这种设计充分利用了现代CPU的缓存机制。
以前GC遍历对象图的时候像在玩跳房子,东跳一下西跳一下, 缓存未命中率高得吓人。
现在它按内存页来扫描,连续性更好,CPU缓存命中率大幅提升。在Intel Ice Lake或AMD Zen 4及更新的CPU上,GC还能利用 vector instructions 向量指令进一步提速,额外带来约10%的性能提升。

如果你遇到兼容性问题,可以通过设置 GOEXPERIMENT=nogreenteagc 在构建时禁用新GC,但这个 opt-out 选项预计在Go 1.27会被移除。
Go团队鼓励大家遇到问题就报issue,毕竟这个新GC已经在Google内部生产环境跑了一段时间,稳定性是有保障的。
对于大多数应用来说,升级到1.26就能免费获得性能提升,这种白嫖的感觉特别爽。

cgo 调用的 baseline runtime overhead 基准运行时开销减少了约30%,这个改进对于需要调用C库的应用来说是巨大的利好。
如果你在用Go操作SQLite、图像处理库或者其他C语言写的组件,现在跨语言调用的成本更低了。

Go在系统编程领域的竞争力因此又上了一个台阶,你可以更放心地把Go当作胶水语言来用,不用担心cgo成为性能瓶颈。

安全加固与实验特性:堆地址随机化防黑客,协程泄露检测帮你抓bug

安全方面也有大动作:64 位平台启动时随机化堆内存基址这是一个安全增强特性,黑客想靠猜地址搞缓冲区溢出?门都没有!让攻击者更难预测内存地址,从而防范利用cgo时的安全漏洞。

这功能默认开,这个特性可以通过 GOEXPERIMENT=norandomizedheapbase64 禁用,但预计在将来的版本中会强制开启。在安全问题日益严峻的今天,这种默认开启的安全防护特别有必要,就像你出门默认锁门一样,虽然麻烦一点但心里踏实。Go 团队这次是铁了心要堵死安全漏洞。


最炸裂的是“goroutine 泄漏检测”实验功能!

实验性的goroutine 协程泄露分析器现在可以通过设置 GOEXPERIMENT=goroutineleakprofile 启用。
这个新功能能检测那些被永远阻塞的协程,比如卡在 channel、sync.Mutex 或 sync.Cond 上却永远等不到唤醒的情况。
它的原理是利用垃圾回收器的可达性分析,如果一个协程G阻塞在并发原语P上,而P从任何可运行的协程都不可达,那么P永远不可能被解锁,G也就永远醒不来。

如果你经常写这种代码:

go
ch := make(chan result)
for _, w := range ws {
    go func() {
        res, err := processWorkItem(w)
        ch <- result{res, err}
    }()
}
// 如果提前 return,其他 goroutine 全卡在 ch <- 上

以前这种泄漏只能靠经验或 pprof 手动排查。
现在?编译时加 GOEXPERIMENT=goroutineleakprofile,运行时访问 /debug/pprof/goroutineleak,就能看到哪些 goroutine 永远醒不过来了!
原理很聪明:如果一个 goroutine 卡在 channel 或 mutex 上,而这个同步原语又被 GC 判定为“不可达”(没人能唤醒它),那它就是泄漏了。

这个特性对于排查生产环境中的资源泄露问题特别有用,比如你在处理并行任务时用了无缓冲channel,某个协程出错提前返回,剩下的协程就会永远阻塞在发送操作上。以前这种问题很难发现,现在运行时会自动检测并报告。

实现这个功能的 Vlad Saioc 来自Uber,背后的理论细节发表在一篇学术论文里,这种产学研结合的模式让Go语言始终保持着技术前沿性。

Go 团队说这功能已生产就绪,只是 API 还在收集反馈。

目标是 Go 1.27 默认开启。赶紧在测试环境试试,别等上线才发现 goroutine 漏成筛子!



编译器与链接器:切片栈分配更聪明,Windows ARM64支持内联链接

编译器现在能在更多情况下把切片slice 的 后备存储分配在栈上,栈分配比堆快得多,还不用 GC 管,这个优化能提升性能。这意味着你的程序不仅更快,内存压力也更小。
如果遇到了问题,可以用 bisect 工具的 -compile=variablemake 标志定位具体是哪个分配出了问题,
或者用 -gcflags=all=-d=variablemakehash=n 关闭所有新的栈分配。

Go 团队贴心地留了后门,但强烈建议你别轻易关——除非真遇到玄学 bug。这种可调试性体现了Go团队对生产环境的尊重,他们知道优化可能会出bug,所以给了开发者足够的工具来排查。

链接器在64位ARM Windows(windows/arm64 端口)上现在支持cgo程序的内部链接模式,可以通过 -ldflags=-linkmode=internal 启用。这对 Windows on ARM 开发者是重大利好,终于不用折腾 external linking 了。

还有一些关于可执行文件格式的细节调整,.go.module 节独立出来,.gopclntab 节去掉重定位信息(移到 rodata 段),.gosymtab 节直接删了(反正一直空着)。
这些改动对运行程序没有影响,但可能会影响那些分析Go可执行文件的工具。比如逆向工程师或安全研究员。如果你写 linker script,可能需要调整。
总之,Go 的二进制格式越来越规范,越来越高效。

Bootstrap 引导方面,Go 1.26现在要求使用Go 1.24.6或更高版本来构建,这个要求确保了工具链的一致性。预计Go 1.28会要求使用Go 1.26的某个小版本来引导,这种滚动升级的策略让代码库不会积累太多的技术债。



标准库大爆发:加密、SIMD、安全擦除全都有!

标准库迎来了几个新包:

首先是 crypto/hpke,实现了RFC 9180规范的 混合公钥加密,还支持后量子混合KEM。这意味着你的应用现在能轻松集成下一代加密协议,为量子计算机时代做准备。这个包对于需要高级加密功能的应用来说是个好消息,Go在密码学方面的支持越来越完善,你不需要再去找第三方库就能实现标准的加密协议。

更猛的是实验性的 simd/archsimd 包可以通过 GOEXPERIMENT=simd 启用,提供了对架构特定SIMD操作的访问。
目前在amd64架构上可用,支持128位、256位和512位的向量类型,比如 Int8x16 和 Float64x8,还有 Int8x16.Add 这样的操作。
这个API目前还不稳定,未来会支持更多架构,而且计划开发高级的可移植SIMD包。现在先让硬核玩家爽一把,对于写高性能计算代码的开发者来说,这就像是拿到了GPU的钥匙,可以充分利用现代CPU的向量运算能力。

runtime/secret 包也是实验性的,通过 GOEXPERIMENT=runtimesecret 启用,能在处理密钥等敏感数据后,主动擦除寄存器、栈、堆上的临时副本。提供了安全擦除临时数据的功能,比如寄存器、栈、堆分配中的敏感信息。这招叫“前向保密”(forward secrecy),防止内存 dump 泄露密钥。这对于处理密码学秘密的代码特别重要,能确保前向安全性。目前支持Linux上的amd64和arm64架构,这种对安全细节的关注让Go在金融、医疗等对安全要求高的领域更有竞争力。


标准库的贴心小改进:从bytes到time,每个包都有惊喜

其他库更新也全是干货:

  • - bytes.Buffer 新增 Peek 方法,偷看 n 字节不移动指针。
  • - crypto 下几乎所有 GenerateKey、Sign 函数都不再接受 random 参数——统一用安全随机源。想做确定性测试?用 testing/cryptotest.SetGlobalRandom。
  • - crypto/tls 默认启用 SecP256r1MLKEM768 等抗量子密钥交换。
  • - fmt.Errorf("x") 现在和 errors.New("x") 一样省内存。
  • - io.ReadAll 内存占用减半,速度翻倍!
  • - net/http 的 ReverseProxy.Director 被废弃——因为有安全漏洞!改用 Rewrite 钩子。
  • - os.Process.WithHandle 提供底层进程句柄(Linux pidfd / Windows Handle)。
  • - reflect 新增 Fields、Methods 等迭代器方法,遍历结构体/函数更优雅。
  • - testing.ArtifactDir 让测试输出文件有固定归处,配合 -artifacts 标志超方便。

bytes 包新增了 Buffer.Peek 方法,可以返回缓冲区的下n个字节而不推进读取位置,这个函数在解析协议的时候特别有用,你可以先偷看一下数据内容再决定怎么读。crypto 包新增了 Encapsulator 和 Decapsulator 接口,让KEM的封装和解封装更抽象,代码写起来更通用。

crypto 家族的各种包(dsa、ecdh、ecdsa、ed25519、rsa、rand)都统一了随机数生成行为,现在这些函数都忽略传入的random参数,直接使用安全的密码学随机源。如果要测试,可以用新的 testing/cryptotest.SetGlobalRandom 函数设置全局确定性随机源。这种统一让API更简洁,也避免了开发者不小心用了不安全的随机源。GODEBUG=cryptocustomrand=1 可以临时恢复旧行为,给迁移留了缓冲期。

crypto/tls 默认启用了混合的 SecP256r1MLKEM768 和 SecP384r1MLKEM1024 后量子密钥交换,可以通过 Config.CurvePreferences 或 tlssecpmlkem=0 GODEBUG设置禁用。还新增了 ClientHelloInfo.HelloRetryRequest 和 ConnectionState.HelloRetryRequest 字段,让TLS握手的细节更透明。如果 Certificate.PrivateKey 实现了 crypto.MessageSigner,会用 SignMessage 方法代替 Sign,这种扩展性让硬件安全模块的集成更方便。

errors 包新增了 AsType 函数,是 As 的泛型版本,类型安全、更快、大多数情况下更易用。fmt.Errorf 对于无格式化字符串的情况现在分配更少,性能和 errors.New 相当。go/ast 新增了 ParseDirective 函数,可以解析 //go:generate 这样的指令注释,写代码生成工具的时候更方便了。go/token 新增了 File.End 方法,返回文件的结束位置,API更完整。

image/jpeg 的编码器和解码器被替换成了新的实现,更快更准确,虽然输出可能和原来bit-for-bit不同,但质量更好。io.ReadAll 现在分配更少的中间内存,返回的切片大小更紧凑,速度提升约两倍,内存占用减半,大文件读取的时候这种优化特别明显。

log/slog 新增了 NewMultiHandler 函数,可以创建同时调用多个Handler的MultiHandler,日志可以同时输出到多个目的地。net 包的 Dialer 新增了 DialIP、DialTCP、DialUDP、DialUnix 方法,支持用context值来指定网络类型。net/http 新增了 HTTP2Config.StrictMaxConcurrentRequests 字段控制HTTP/2连接行为,还有 Transport.NewClientConn 方法返回客户端连接,给需要自定义连接管理的场景提供了灵活性。

net/http/httptest 的 Server.Client 现在会把 example.com 及其子域名的请求重定向到测试服务器,写测试的时候更方便模拟外部API。net/http/httputil 的 ReverseProxy.Director 被标记为废弃,推荐使用 Rewrite,因为Director有安全问题,恶意客户端可以移除添加的头部。net/netip 新增了 Prefix.Compare 方法比较两个前缀。net/url 的 Parse 现在拒绝主机部分包含冒号的畸形URL,比如 http://::1/ 这种,但带方括号的IPv6地址 http://[::1]/ 仍然接受,可以通过 urlstrictcolons=0 GODEBUG恢复旧行为。

os 包新增了 Process.WithHandle 方法,在支持的平台上(Linux 5.4+的pidfd,Windows的Handle)提供对内部进程句柄的访问。Windows上OpenFile的flag参数现在可以包含任意Windows特定的文件标志,比如 FILE_FLAG_OVERLAPPED 和 FILE_FLAG_SEQUENTIAL_SCAN,控制文件缓存行为和访问模式更灵活。

os/signal 的 NotifyContext 现在用 context.CancelCauseFunc 取消返回的context,并附带指示收到哪个信号的错误,错误处理更精确。reflect 包新增了 Type.Fields、Type.Methods、Type.Ins、Type.Outs 方法返回迭代器,还有 Value.Fields 和 Value.Methods 方法,遍历结构体字段和方法更方便,性能也更好。

runtime/metrics 新增了多个调度器指标,包括 /sched/goroutines 前缀下各种状态的协程计数、/sched/threads:threads 表示运行时知道的OS线程数、/sched/goroutines-created:goroutines 表示程序创建的协程总数。这些指标对于监控和调优Go应用特别有价值,你可以更清楚地了解运行时内部的状态。

testing 包新增了 T.ArtifactDir、B.ArtifactDir、F.ArtifactDir 方法,返回用于写入测试输出文件的目录。当给 go test 提供 -artifacts 标志时,这个目录位于 -outputdir 指定的输出目录下,否则在临时目录里测试结束后删除。第一次调用 ArtifactDir 时会写入 === ARTIFACTS 日志行,方便CI系统收集测试结果。B.Loop 方法不再阻止循环体的内联,这解决了之前可能导致意外分配和基准测试变慢的问题,现在所有基准测试都可以从旧的B.N风格迁移到新的B.Loop风格。

testing/cryptotest 新增了 SetGlobalRandom 函数,配置全局的确定性密码学随机源,影响 crypto/rand 和所有 crypto/... 包中的隐式随机源。time 包的 asynctimerchan GODEBUG设置将在下个主要版本移除,Go 1.27开始将始终使用无缓冲的同步channel来处理timer。



平台支持调整:macOS 12 Monterey即将退役,RISC-V支持竞态检测

端口支持方面,Darwin(macOS)的Go 1.26是最后一个支持macOS 12 Monterey的版本,Go 1.27将要求macOS 13 Ventura或更高版本。这个调整符合苹果的操作系统支持周期,也给开发者留了一年的迁移时间。FreeBSD的 freebsd/riscv64 端口被标记为broken,具体原因可以参考issue 76475。Windows的32位 windows/arm 端口按照Go 1.25的预告已经被移除,这个broken的端口终于寿终正寝。

PowerPC方面,Go 1.26是最后一个支持Linux上 big-endian 64位 PowerPC 端口(GOOS=linux GOARCH=ppc64)的ELFv1 ABI的版本,Go 1.27将切换到ELFv2 ABI。由于该端口目前不支持链接其他ELF对象,这个变化对用户应该是透明的。RISC-V的 linux/riscv64 端口现在支持 race detector 竞态检测器,这个特性对于在多核RISC-V设备上开发并发程序特别有用。

S390X端口现在支持用寄存器传递函数参数和结果,这种ABI改进能减少栈操作,提升性能。WebAssembly方面,编译器现在无条件使用 sign extension 和 non-trapping floating-point to integer conversion 指令,这些特性从Wasm 2.0开始就是标准,对应的 GOWASM 设置 signext 和 satconv 现在被忽略。对于WebAssembly应用,运行时现在用更小的增量管理堆内存,对于堆小于16MiB的应用内存占用显著减少,这个优化让Go写的WASM程序在浏览器里运行更轻量。



Go 团队到底图啥?

看到这里你可能想问:Go 团队疯了吗?又是新 GC,又是泄漏检测,又是 SIMD,还搞抗量子加密……他们图什么?图你开心啊!Go 从诞生起就坚持“简单、高效、可靠”。Go 1.26 的每一项更新,都在强化这个三角:  

- 简单:new 表达式、go fix 自动化、ArtifactDir 统一输出;  
- 高效:“绿茶”GC、cgo 加速、io.ReadAll 优化;  
- 可靠:堆地址随机化、goroutine 泄漏检测、crypto 强制安全随机。

他们知道,现代软件开发早已不是“能跑就行”。你需要性能,需要安全,需要可维护性。Go 1.26 就是在这些维度上全面加码。而且,所有改动都遵守 Go 1 兼容承诺——你的老代码,一行不改照样跑。这种“向前兼容”的克制,在当今浮躁的技术圈简直是一股清流。


Go语言在新领导下的稳健进化

这次Go 1.26的发布有着特殊的意义,因为这是 Austin Clements 接任技术负责人、Cherry Mui 接任Go核心负责人之后的第一个正式版本。

Austin从2014年加入Go团队,是MIT的博士,主导了Go的并发垃圾回收、抢占式调度器和链接器的开发,技术深度和广度都无可挑剔。
Cherry从2016年加入,布朗大学化学博士背景,在编译器和运行时方面贡献卓著,是Go核心团队首位女性技术负责人。

前任技术负责人 Russ Cox 在领导Go项目12年后于2024年9月卸任,他主动拒绝BDFL(终身仁慈独裁者)模式,认为定期更换领导能给项目带来新视角。
这种功成身退的胸怀特别令人敬佩,他把Go从实验性语言带到了云原生时代的基石语言,现在又把接力棒交给了新一代领导者。
Austin和Cherry的搭档让人对Go的未来充满信心,他们既有深厚的技术功底,又有开放的合作态度。

Go 1.26这个版本体现了新领导团队的务实风格,没有激进的重构,而是在性能、安全、开发体验上稳步提升。

Green Tea GC的默认启用是 runtime 层面的重大升级,new(expr)的语法糖让代码更简洁,go fix的重写让代码迁移更顺畅,标准库的新包让功能更完善。

这些改进累积起来,让Go在云原生、微服务、系统编程领域的地位更加稳固。

如果你还在用旧版本,现在就是升级的最佳时机,免费的性能提升和更好的开发体验在向你招手。



最后叮嘱:赶紧升级,但别盲目!

Go 1.26 要求用 Go 1.24.6+ 来编译自己(bootstrap)。这意味着你不能拿 Go 1.20 直接 build 1.26。官方预告:Go 1.28 将要求 Go 1.26+ 来 bootstrap。所以,保持工具链更新很重要。

升级建议:  
1. 先在测试环境跑一遍,尤其关注 GC 行为和 cgo 调用;  
2. 如果用 goroutine leak profile,记得开实验开关;  
3. 检查是否依赖旧版 go fix 或 go tool doc;  
4. WebAssembly 用户确认运行环境支持 Wasm 2.0。

Go 1.26 不是颠覆,而是进化。它没有引入花里胡哨的新语法,却在底层做了大量扎实工作。正如那句老话:“真正的好工具,让你感觉不到它的存在。” 而 Go 1.26,就是让你写代码时,只专注于逻辑本身——剩下的,交给“绿茶”和 go fix 吧!