Go问答技术文章
-
Go 的 QueryRowContext 总会返回非 nil 的 Row,查询错误、无结果和类型转换问题会延迟到 Scan。本文用可运行的错误分支解释这一设计,并给出 sql.ErrNoRows、Context 和 Row.Err 的正确处理方式。358 收藏 -
对比 Go FlightRecorder 与 trace.Start 持续 execution trace 的触发时机、数据范围和资源边界,并用可切换小项目给出选型方法。358 收藏 -
Go 模糊测试默认会让多个 worker 并发调用 fuzz target,固定临时文件名因此可能被覆盖或提前删除。本文用 t.TempDir、os.CreateTemp 和目录注入给出可复现、可清理的修复方式。358 收藏 -
第三方 Go 模块停止维护后,不要只看更新时间做决定。本文从 API 兼容性、修复责任和迁移成本出发,比较替换、分叉与适配器隔离三种方案,并给出 go.mod、fork 和 govulncheck 的落地检查点。357 收藏 -
从 invalid buffer overlap 故障讲清 Go cipher.AEAD.Open 的切片重叠契约,比较精确重叠、完全分离与错位重叠,并给出原地解密、独立缓冲区和认证失败处理方法。355 收藏 -
Go 1.27 支持具体类型声明泛型方法,但类型参数只出现在返回值时,方法调用仍可能无法完成类型推断。本文给出显式类型实参、目标指针、解析回调和具体包装方法四种改法,并说明规模化 SDK 的取舍。355 收藏 -
runtime.GoroutineProfile 的记录数会随 goroutine 创建和退出而变化。本文比较一次分配、带余量的有界重试和 runtime/pprof,给出容量上限、重试上限、records[:n] 截断与失败处理写法。354 收藏 -
Go 接口字段既可能缺失,也可能显式传 null。本文说明普通值和单层指针为何不足,并给出 Optional[T] 三态模型、PATCH 更新规则、响应编码方式、失败处理及测试清单。354 收藏 -
Go slog 日志量过大时,先用 LevelVar 和 HandlerOptions.Level 过滤低价值日志,再对可聚合的成功事件做带键采样;错误、审计和关键状态变化保持全量保留。354 收藏 -
archsimd 目标实现是否被选中取决于 GOEXPERIMENT=simd、目标 GOARCH、文件名隐式约束和显式 //go:build 的共同结果,运行时 CPU 特性检查不会改变已编译文件。354 收藏 -
Go flight recorder 的缓冲区太小时不会按事件类型选择性丢弃,而会淘汰较老的完整 trace generation。本文解释 MaxBytes 与 MinAge 的优先级、会缺失的上下文及容量配置方法。354 收藏 -
strings.Builder 首次写入后会记录自身地址;按值复制会让副本携带旧地址,后续 Write 或 Grow 被 copyCheck 判定为非法复制并 panic。修复应改用单一所有者、指针传参或返回字符串。352 收藏 -
从 WaitGroup 计数器、Add、Done 与 Wait 的关系出发,解释负数 panic、Wait 早退和批次复用的边界,并给出稳定的 Go 并发写法。351 收藏 -
Go workspace 模式下 go.mod 的本地 replace 看似失效,通常是父目录 go.work 已被自动启用、工作区 replace 优先级更高,或版本限定没有匹配构建列表。本文给出定位和修复方法。350 收藏 -
big.Int.SetBytes 的契约是把输入解释为无符号大端整数,因此不会读取符号位。需要负数时,应由协议明确符号字段,或按固定字节宽度自行解析二进制补码。349 收藏