Go问答技术文章
-
Go aes.NewCipher 报 invalid key size 时,关键不是截断或补零,而是确认 key 的实际字节数。本文区分原始字节、hex、base64 和密码输入,给出 16/24/32 字节检查、错误处理与 AES-GCM 调用边界。165 收藏 -
ring.New(0) 返回 nil 不是初始化失败,而是 container/ring 对空环的明确表示。本文结合官方源码区分 nil 空环与 Ring 零值,说明 n<=0 的处理、可安全调用的方法及两种工程修复方式。385 收藏 -
从公开 API 和 heap.Interface 两层拆开 Go heap.Remove、heap.Pop 与 Pop 方法的索引语义,掌握根节点出队、任意位置删除和索引维护的正确写法。293 收藏 -
解释 Go gzip.Header.Name 解压后为空的四类原因:源流未写 FNAME、Name 设置过晚、Writer.Reset 清空头部,以及多成员默认只记录首个 Header,并给出正确代码与检查清单。129 收藏 -
解释 Go flate.NewReaderDict 遇到错误字典时为何可能报 CorruptInputError,也可能无错误却产生错误字节,并给出字典 ID、输出上限、完整性校验与 zlib 替代方案。465 收藏 -
解释 Go cmp.Compare 遇到 NaN 时的返回规则:NaN 小于任意非 NaN、NaN 与 NaN 相等、负零与正零相等,并给出默认排序及 NaN 靠后的定制写法。258 收藏 -
说明 Go bytes.Buffer.Next 的参数超过未读长度时会返回全部剩余字节并耗尽缓冲区,进一步解释切片有效期、精确定长读取和空缓冲边界。456 收藏 -
Go bufio.Reader.UnreadByte 只能撤回最近一次成功读到的字节,因为 Reader 只维护一个回退状态而不是历史栈。本文结合缓冲游标、失效调用和替代方案说明如何正确处理解析试探。341 收藏 -
解释 Go bufio.Scanner 连续空 token 停止或 panic 的根因,区分 nil token、advance 与 ErrFinalToken,并给出安全 SplitFunc 写法。296 收藏 -
tar.Header.Format 变成 FormatUnknown,通常表示 Reader 虽能解析条目,却无法把其头部可靠归类为 USTAR、PAX 或 GNU;本文区分未知格式与 ErrHeader,并给出安全转存方式。397 收藏 -
zip.File.Open 返回解压后的逻辑内容并通过 io.ReadCloser 管理读取资源;OpenRaw 返回 ZIP 中未经解压的压缩载荷。本文以解析失败场景拆解两者差异,给出业务读取、内容哈希和 Writer.Copy 原样迁移的正确选择。123 收藏 -
Go 1.27 的 simd 与 simd/archsimd 仍由 GOEXPERIMENT=simd 控制。本文说明启用门槛、两层 API 差异、可移植层的硬件与纯 Go 回退,以及如何用 build tag、GOARCH 和 CPU 特性检查保留稳定的标量路径。280 收藏 -
Go json/v2 迁移的难点不在替换 import,而在字段名匹配、omitempty、nil 集合和未知成员等行为差异。用清单和 DefaultOptionsV1 可以分阶段切换。179 收藏 -
讲清 Go 1.27 泛型方法为什么不能直接满足接口,并比较非泛型桥接、参数化接口与顶层泛型函数三种兼容设计。460 收藏 -
从 ns/op、B/op 和 allocs/op 三个指标出发,解释 Go 小对象分配、size class 与 tiny allocator 对基准测试解读的影响,并给出可重复的对照方法。349 收藏