Go问答技术文章
-
io.LimitedReader 的 N 是剩余读取预算,不是底层文件或网络流的真实长度。本文按 N、读取字节数和 error 分层判断达到上限、源数据提前 EOF 与其他错误,并给出固定长度读取的选择。337 收藏 -
Go embed 在编译期把文件内容写入运行包,修改磁盘文件后必须重新构建并确认启动的是新产物。本文用 embed.FS 示例说明旧二进制、路径不一致和开发态加载方式的排查边界。337 收藏 -
Go 中 bytes.Equal 和 string == 都是在比较底层字节序列,但 []byte 不能直接做内容比较,nil 与空切片、UTF-8 和 Unicode 规范化又有不同边界。本文用最小例子说明如何选对比较方式。337 收藏 -
Go unicode.IsMark 判断的是单个 rune 是否属于 Unicode 的 Mark 类别 M,包含非间距、间距组合和包围标记。本文用具体字符串拆开预组字符与组合序列,说明如何按 rune 分类、如何解释字节偏移,以及为什么 IsMark 不能代替正规化或用户感知字符切分。337 收藏 -
Go roaring 的 Rank 用于统计小于等于目标值的元素数量,Select 用于按 0 起始序号取出有序集合中的元素。本文用 Go 示例说明两者的下标约定、分页用途和空集合、越界、并发访问边界。337 收藏 -
Go 1.23 的 slices.Chunk 返回的是源切片的连续子切片视图:直接改元素会影响原切片,但每个分块的容量被限制为长度,append 不会沿用这段容量改写源数据。需要独立分块时使用 slices.Clone。337 收藏 -
go list -json 会把普通源文件、同包测试文件和外部包测试文件放进不同字段。本文用 GoFiles、TestGoFiles、XTestGoFiles 的包名边界,说明代码生成器和测试收集器该怎样选择数组。336 收藏 -
Go 使用 unixgram 接收本地数据报时,每次读取对应一个独立报文,但缓冲区太小会让消息内容被截断。本文用 ReadFromUnix 和 ReadMsgUnix 说明怎样保留边界、识别风险并选择合适的读取方式。336 收藏 -
Go x/text/unicode/norm 的 NFKC 会先做兼容分解,再做规范组合,因此全角、带圈数字、上标和连字等字符可能改变外观。本文说明变化原因、Go 写法与不应使用 NFKC 的语义边界。336 收藏 -
Go crypto/ecdh 的 ECDH 曲线不匹配,通常是本地私钥与远端公钥使用了不同 Curve。本文区分 NewPublicKey 解析错误和 ECDH 曲线错误,给出统一曲线、接收公钥和生产排查清单。336 收藏 -
Go 1.27 泛型方法调用无法推断类型参数时,先核对工具链,再检查普通参数和回调是否提供足够证据,并用显式类型实参区分推断失败、约束不匹配、方法表达式和接口边界问题。335 收藏 -
Go time.Parse 遇到不带时区的字符串时会按 UTC 解释,这不是读取机器本地时区失败,而是标准规则。本文用 ParseInLocation 指定业务时区,并用 Location、Zone 和 Unix 对比确认结果。335 收藏 -
Go binary.Read 按协议字段顺序和字节序读取数据,不会自动把结构体隐式对齐当成报文字节。本文用固定头、显式保留字段、长度检查和跨平台解析说明如何定位结构体对齐误解。335 收藏 -
Go 数据竞争测试偶现失败时,可从具体包和测试名缩小范围,成对分析 race 访问栈定位共享对象,再统一加锁或隔离状态,并保留并发回归测试。335 收藏 -
go-runewidth 的歧义宽度字符并不都会随东亚宽度策略变成两列。本文解释 EastAsianWidth、Condition、IsAmbiguousWidth 与 RuneWidth 的差异,并给出固定终端表格对齐口径的 Go 写法。335 收藏