跳转到内容

v1.10.3

发布于 2026-08-01 - GitHub Release

FirstN 通过一个计数器遍历 rune,该计数器永远不可能等于负数的 n,因此会静默返回整个输入字符串而不是空字符串。现在增加了提前返回的保护逻辑,使负数长度的行为可预期:

if n < 0 {
return ""
}

stringxSubstr 拒绝 start > stop 以避免切片 panic(#5616

Section titled “stringx:Substr 拒绝 start > stop 以避免切片 panic(#5616)”

Substr 此前分别校验 startstop 是否在 [0, length] 范围内,但从未检查 start <= stop。类似 Substr("hello", 3, 2) 的调用会绕过两个检查并在 rs[3:2] 上 panic。现在 start > stop 会被视为无效的结束位置,返回 ErrInvalidStopPosition 而不是 panic。

httpx.Parse 此前无法正确反序列化指针切片字段(例如 *[]uint64)。fillSlice 使用 fieldType.Elem(),对于 *[]T 会解析为 []T 而不是 T,导致类似 [9000, 9001] 的 JSON 数组出现类型不匹配错误。现在会先对字段类型解引用,再解析切片元素类型。

DisableIdentityProtocol 字段现在会透传给 go-redis,并且默认禁用 MaintNotifications,因为开源版 Redis 不支持 CLIENT MAINT_NOTIFICATIONS 命令。此修复解决了高并发场景或使用不兼容 Redis 服务器时熔断器误触发的问题。

core/collection.Queue 此前每次队列满时都按初始队列大小扩容底层切片,对于较小的初始容量会导致 O(n²) 的总拷贝开销。新实现采用类似 Go 切片的扩容曲线——小队列翻倍扩容,大队列逐步过渡到 1.25 倍扩容——同时保证环形缓冲区回绕时 FIFO 顺序不变,清空出队槽位以便 GC 回收被引用的对象,并拒绝非正数的初始容量。

新方法用于更新流上消费者组的最后投递 ID:

lastID, err := client.XGroupSetIDCtx(ctx, "mystream", "mygroup", "$")
  • go-redis/v9 9.19.0 → 9.21.0
  • mongo-driver/v2 2.6.0 → 2.8.0
  • pelletier/go-toml/v2 2.3.1 → 2.4.3

完整变更日志https://github.com/zeromicro/go-zero/compare/v1.10.2…v1.10.3