Go问答技术文章
-
Go x/text/transform 的 Reset 是流状态重置,不是每个输入块的清理钩子。本文说明 pending state、ErrShortSrc、Writer.Close 与分块循环的关系,帮助你把 Reset 放到正确的逻辑流边界。348 收藏 -
Go Expr 自定义函数参数不匹配时为什么会在 Compile 阶段报错?本文用显式函数签名说明参数数量、参数类型和返回值约束的检查边界,并给出生产规则发布前的排查清单。348 收藏 -
Go go-runewidth 会把组合字符按零宽码点处理,再在 StringWidth 中结合 grapheme cluster 计算终端单元格宽度。本文说明 RuneWidth、IsCombiningWidth、StringWidth 与 Condition 的配合方式。348 收藏 -
Go 的 reflect.DeepEqual 对数字沿用 ==,所以 NaN 不等于自身;同一切片、map 或指针又可能因身份捷径返回 true。本文拆开反射语义、unsafe 位模式比较和可维护的 NaN 业务判断。348 收藏 -
Go 按字节截断可能拆开 UTF-8 编码。本文比较完整字节前缀与 rune 前缀,提供严格输入的原创函数,并说明替换字符、流式尾部和字素簇的判断边界。348 收藏 -
Go 模块路径是包身份的一部分。本文给出保留旧入口、单一新实现、类型别名与函数包装的迁移方案,并说明如何排查双份包和正确使用 replace。347 收藏 -
Go 的 database/sql Conn.Raw 适合短暂访问驱动特有能力,但底层 driver.Conn 只能在回调期间使用。本文用一个连接池场景说明借用、错误传播、归还和并发边界。347 收藏 -
用 io.NewSectionReader 为大文件建立固定偏移和长度的只读视图,再通过 io.Copy、ReadAt 和 Seek 导出或读取指定区间,避免先把整个文件加载进内存。347 收藏 -
Go atomic.Pointer 的 Load 读到 nil,通常不是原子操作失效,而是对象尚未 Store、代码显式发布了 nil,或读取时机早于初始化发布。本文用最小示例和轻量指标拆开这些边界,并补充复制 atomic.Pointer 的风险。347 收藏 -
Go netlink 中,Execute 是 Send、Receive 和 Validate 的请求-回复封装;拆成 Send 加 Receive 后,可以在收发之间设置边界、读取已填充的消息头或自行决定校验时机。本文用原创代码和静态结构图说明两种写法的职责、multipart 回复、错误处理与选择场景。347 收藏 -
Go 升级后 encoding/json.Decoder 的结果或错误发生变化时,不要先修改业务逻辑。本文按工具链、实现、Decoder 配置、输入字节和目标类型五层建立最小复现矩阵,说明如何区分真实语义差异与错误文本变化。347 收藏 -
Go binary.Uvarint 返回 n=0 不是解出了数字 0,而是当前缓冲区还不够完整;n<0 则表示溢出。本文从分片输入场景出发,给出三种返回值的判断、游标推进、尾部保留和 ReadUvarint 选择方法。346 收藏 -
Go 的 netip.ParseAddr 不只解析普通 IPv4 和 IPv6,也能保留带作用域 zone 的 IPv6 地址。本文说明带百分号的地址如何解析、怎样读取 Zone、如何避免把端口误传给 ParseAddr。346 收藏 -
解释 Go x/text/secure/precis 中昵称强制规范化、比较键和等价比较的区别,给出处理 Unicode 昵称冲突的实用写法。346 收藏 -
判断 Go append 是否更换底层数组,先比较追加量与剩余容量,再在非空、相同起点的整数切片中观察元素地址和修改影响。文中给出容量充足与不足的对照示例,并区分限制容量与复制。346 收藏