Go问答技术文章
-
Go 使用 bufio.Writer 写文件后内容为空,通常不是 os.Create 没有成功,而是数据仍停留在 Writer 的内存缓冲区。本文从实际排障场景出发,说明 Flush、Close、Sync 的职责,给出带错误处理的稳定写法和检查清单。162 收藏 -
在 ARM、386 和 32 位 MIPS 上,直接使用 64 位 atomic 函数时需要由调用方保证地址对齐;atomic.Int64 和 atomic.Uint64 会自动对齐。本文结合结构体布局说明问题原因、改法和发布前检查项。162 收藏 -
Go Starlark 的 Freeze 会递归标记可达值,使集合在发布给并发解释器后不能再通过 API 修改。本文拆开冻结语义、嵌套对象、引用环和实际修复方式。162 收藏 -
解释 Go Goldmark 中普通回车、显式硬换行和 WithHardWraps 的渲染差异,并给出中文文本选择 LineBreakStrategy 的判断方法。161 收藏 -
Go 测试套件中,慢测试可以通过 testing.Short 与 t.Skip 在 go test -short 时跳过、完整模式时执行。本文说明标志关系、代码组织、与自定义环境变量的取舍,以及不该交给 -short 解决的边界。161 收藏 -
解释 go test 中 T.Cleanup 的父子测试层级、同层后进先出和 t.Parallel 等待屏障,帮助排查清理顺序与共享资源释放问题。161 收藏 -
math/big.Int.SetString 解析失败时返回 nil,但接收对象的值是未定义的,可能继续显示旧值。本文解释返回值契约、base 参数和对象复用的安全写法。161 收藏 -
Go 多层包装错误时,使用 fmt.Errorf 的 %w 保留错误链,再用 errors.Is 判断哨兵错误、errors.As 提取自定义错误类型;本文同时说明 %v 为什么会切断程序化判断,以及如何处理 API 暴露边界。161 收藏 -
Badger 的 Value 回调参数只适合在回调内读取,ValueCopy 则把值复制到调用方切片。本文对比两种接口的生命周期、资源释放和长事务中的选择方式。159 收藏 -
说明 Go Ristretto 中 NumCounters 与 MaxCost 的职责差异,帮助你按访问频率和成本容量分别配置缓存。159 收藏 -
Go 用 netip.ParseAddr 解析 IPv6 失败时,先区分纯地址、带接口 Zone 和带端口文本;带端口改用 ParseAddrPort,带 Zone 则通过 Addr.Zone 读取。本文给出最小写法、错误分支和迁移清单。159 收藏 -
math/big.Int 可以保存超出 int64 的整数,但 Int64 在越界时不能作为可靠结果使用。本文从失真现象出发,说明如何用 IsInt64 先判断范围,再决定安全转换或继续保留大整数。159 收藏 -
解释 Gock 为什么在没有匹配 mock 时直接返回错误,梳理 FIFO 匹配、默认网络隔离、自定义 http.Client 拦截与未匹配请求排查方法。159 收藏 -
go-chart 的 ContinuousSeries 要求 XValues 与 YValues 按索引一一对应且长度相同。本文区分 Validate 错误、索引越界与多余 Y 值,并给出构造前预检和测试写法。159 收藏 -
context.WithTimeout 超时后,子协程仍在运行通常不是超时失效,而是 goroutine 没有监听 ctx.Done(),或卡在无法取消的阻塞调用中。本文用最小复现区分取消信号和强制终止,再给出可退出、可清理的 select 写法。159 收藏