v1.10.3
发布于 2026-08-01 - GitHub Release
stringx:FirstN 在 n 为负数时返回空字符串(#5620)
Section titled “stringx:FirstN 在 n 为负数时返回空字符串(#5620)”FirstN 通过一个计数器遍历 rune,该计数器永远不可能等于负数的 n,因此会静默返回整个输入字符串而不是空字符串。现在增加了提前返回的保护逻辑,使负数长度的行为可预期:
if n < 0 { return ""}stringx:Substr 拒绝 start > stop 以避免切片 panic(#5616)
Section titled “stringx:Substr 拒绝 start > stop 以避免切片 panic(#5616)”Substr 此前分别校验 start 和 stop 是否在 [0, length] 范围内,但从未检查 start <= stop。类似 Substr("hello", 3, 2) 的调用会绕过两个检查并在 rs[3:2] 上 panic。现在 start > stop 会被视为无效的结束位置,返回 ErrInvalidStopPosition 而不是 panic。
mapping:修复指针切片字段的反序列化问题(#5662)
Section titled “mapping:修复指针切片字段的反序列化问题(#5662)”httpx.Parse 此前无法正确反序列化指针切片字段(例如 *[]uint64)。fillSlice 使用 fieldType.Elem(),对于 *[]T 会解析为 []T 而不是 T,导致类似 [9000, 9001] 的 JSON 数组出现类型不匹配错误。现在会先对字段类型解引用,再解析切片元素类型。
redis:修复高并发下熔断器误触发的问题(#5654)
Section titled “redis:修复高并发下熔断器误触发的问题(#5654)”DisableIdentity 和 Protocol 字段现在会透传给 go-redis,并且默认禁用 MaintNotifications,因为开源版 Redis 不支持 CLIENT MAINT_NOTIFICATIONS 命令。此修复解决了高并发场景或使用不兼容 Redis 服务器时熔断器误触发的问题。
collection:优化 Queue 的扩容策略(#5704)
Section titled “collection:优化 Queue 的扩容策略(#5704)”core/collection.Queue 此前每次队列满时都按初始队列大小扩容底层切片,对于较小的初始容量会导致 O(n²) 的总拷贝开销。新实现采用类似 Go 切片的扩容曲线——小队列翻倍扩容,大队列逐步过渡到 1.25 倍扩容——同时保证环形缓冲区回绕时 FIFO 顺序不变,清空出队槽位以便 GC 回收被引用的对象,并拒绝非正数的初始容量。
redis:新增 XGroupSetID/XGroupSetIDCtx(#5637)
Section titled “redis:新增 XGroupSetID/XGroupSetIDCtx(#5637)”新方法用于更新流上消费者组的最后投递 ID:
lastID, err := client.XGroupSetIDCtx(ctx, "mystream", "mygroup", "$")go-redis/v99.19.0 → 9.21.0mongo-driver/v22.6.0 → 2.8.0pelletier/go-toml/v22.3.1 → 2.4.3
完整变更日志:https://github.com/zeromicro/go-zero/compare/v1.10.2…v1.10.3
