跳过正文

golang1.27尝鲜

·104 字·1 分钟

只挑我感兴趣的,完整release note在Go 1.27 Release Notes - The Go Programming Language

升级
#

go install golang.org/dl/go1.27rc1@latest

go1.27rc1 download

泛型方法
#

Go 1.27 开始支持:

func (s Set[T]) Map[U any](f func(T) U) []U {
    ...
}

很多 Fluent API、集合库、Stream 库终于能写得自然:

users.
    Filter(...).
    Map(...).
    GroupBy(...)
警告

接口方法仍然不能声明类型参数

type Reader interface { Read[T any]() T } // ❌

encoding/json v2 正式进入标准库
#

当然是有v2用v2:性能提升、规范增加、功能增加

添加了两个包:

默认设置和v1有一些不同的地方,例如严格大小写、拒绝非法utf8字符、拒绝重复名称之类的

而且还添加了Options选型,可以用来调控行为

goroutine泄漏侦察
#

goroutineleak是一个新profile,可以用来检测泄漏的goroutine

泄漏的goroutine就是阻塞在某些并发原语上的goroutine,而且这些并发原语只有它们自己持有,所以绝无唤醒的可能

在1.26就作为实验性功能启用,在1.27正式启用了

原理是可达性,所以如果并发原语是全局变量或者能被其他goroutine访问的话,是无法发现leak的

uuid进入标准库
#

字面意思,新的uuid包可以用来生成和解析UUID 官方UUID库只支持uuidV4和uuidV7 据说官方的UUID库在浏览器上生成uuid的时候,uuidv7的时间相关序列会被抹平。因为浏览器处于安全考虑,提供的时间精度很低。所以官方和社区的解决方案是降级为用crypto/rand来生成随机安全比特,为了UUIDv7的递增性,所以是累加的