Go问答技术文章
-
用 Go 的 big.Rat.FloatPrec 判断分数能否精确写成有限小数,读懂 n 与 exact 的含义,并处理 FloatString 的舍入边界。203 收藏 -
Go encoding/csv 解析失败时,errors.As 可以取出 ParseError 的 StartLine、Line、Column 和底层 Err。本文用多行字段示例说明行列含义,并区分引号错误、字段数错误与业务定位。203 收藏 -
Go bufio.Scanner 结果不稳定时,应分别检查临时缓冲复用、扫描错误、分词规则与异步顺序。通过有界串行示例说明 Text 快照、整批失败策略和数据交接边界。201 收藏 -
Go crypto/mlkem 的 Decapsulate 对错误长度密文返回 error,但对长度正确、内容无效的密文不会报错,而是生成与发送方不同的共享密钥。本文按这两条语义说明长度检查、上层认证和错误处理边界。195 收藏 -
io.OffsetWriter 把逻辑偏移映射到基准偏移之上,Seek 返回的是逻辑位置,Write 和 WriteAt 的坐标也不能混看。本文用分段写入场景拆解错位原因,并给出调用约定、边界处理与排查清单。194 收藏 -
Go ServeMux 优先级取决于方法与路径共同限定的匹配集合。用库存路由示例解释严格子集、GET 与 HEAD、固定段与通配符,以及交叉模式为何注册时冲突,并说明兜底路由的取舍。193 收藏 -
runtime.SetFinalizer 不是定时器,也不保证在进程退出前执行。本文从对象可达性、闭包捕获、引用环、GC 与单一 finalizer 队列几个方向解释对象未及时回收,并给出 KeepAlive、显式 Close 与 AddCleanup 的选择边界。191 收藏 -
context.Cause只读取取消原因,不会关闭资源或等待协程退出。文章区分取消信号、阻塞点、资源所有权和结束确认,并用文件导出示例说明如何安排cancel、Close与返回结果。187 收藏 -
maps.EqualFunc 先比较两个 map 的长度,再按键查找并调用自定义值比较函数,所以 nil map 与空 map 都因长度为 0 而返回 true。本文拆解源码规则,给出最小示例,并说明如何在业务上区分 nil 与空。187 收藏 -
Go 的 Color.RGBA 返回 alpha 预乘的 16 位通道,而 NRGBA 结构体保存非预乘的 8 位字段。本文用 NRGBAModel.Convert 处理 RGBA、NRGBA 与半透明像素转换,避免重复乘 alpha。183 收藏 -
Go 测试辅助函数不必手动拼接父子测试名称,传入 *testing.T 后调用 t.Name() 即可获取当前测试或子测试的完整名称。本文说明表驱动测试、t.Helper 配合方式,以及名称作为诊断信息时的边界。177 收藏 -
maps.Keys 返回的是可迭代的键序列,不是现成切片。本文用 Go 1.23 的 range 语法收集 map 键,说明 nil map 与空 map 的结果,并提醒 map 键的迭代顺序不能当成稳定排序。177 收藏 -
runtime.KeepAlive 只保证对象在指定位置前仍然可达,不负责关闭文件描述符、连接或其他外部资源。本文从终结器提前运行的风险出发,说明 KeepAlive 的正确位置、显式 Close 的责任和资源持续占用的排查方法。176 收藏 -
testing.T.Setenv 不会返回 error,设置失败会直接让测试失败;并行测试还会触发额外限制。本文区分 t.Setenv、os.Setenv、Fatal 输出和并发冲突,给出稳定的 Go 测试写法。175 收藏 -
go/version.IsValid 判断的是带 go 前缀的 Go 工具链版本语法。本文用一个最小项目拆解前缀、数字段、预发布标记和自定义后缀,定位 1.23、前导零及补丁后预发布写法被拒绝的原因。175 收藏