Go问答技术文章
-
Go VerifyASN1 验签失败,通常要先检查公钥、原始摘要字节和 ASN.1 签名字节是否来自同一套协议约定。本文给出输入契约、编码区别、签名入口选择和排错表。196 收藏 -
Go 1.26 为 testing.T 增加 ArtifactDir:用它取得当前测试或子测试独立的产物目录,把失败现场写入其中;配合 -artifacts 和 -outputdir,本地与 CI 都能保留测试文件。196 收藏 -
解释 go test 的两种执行模式、(cached) 命中条件、count=1 对照方法和 go clean -testcache 的清理边界,帮助排查修改后结果不变。195 收藏 -
切换 JSON v2 时,应按字段协议处理 string 标签,而不是只替换 import。本文对比数字、文本、布尔与集合的适用边界,给出最小 DTO 和旧接口渐进迁移建议。195 收藏 -
Go 流式响应一直到处理结束才到客户端,通常不是一个原因。本文拆开服务端 Flush、ResponseWriter 包装器和 HTTP 代理三层,给出可处理 Flush 错误的排查与实现方式。195 收藏 -
Go os.Stat 失败时不要只比较错误字符串:用 errors.Is 区分文件不存在与权限拒绝,再从 PathError 提取操作和路径信息,覆盖中间目录不可访问等排障边界。195 收藏 -
Go 32 位平台使用 64 位原子计数器时,普通 uint64 与 atomic.Uint64 的对齐责任不同。本文比较旧式原子函数、类型化原子对象和互斥锁的适用边界,给出结构体布局与兼容检查清单。195 收藏 -
Go crypto/mlkem 的 Decapsulate 对错误长度密文返回 error,但对长度正确、内容无效的密文不会报错,而是生成与发送方不同的共享密钥。本文按这两条语义说明长度检查、上层认证和错误处理边界。195 收藏 -
sync.Once 的 Do 只负责让初始化函数最多执行一次,初始化函数返回错误并不会自动恢复可重试状态。本文用最小复现说明第一次失败后第二次调用为何不再进入函数,并给出需要重试时的显式状态方案。195 收藏 -
Go 中的 strconv.FormatFloat 使用 prec=-1 时,会选择能够让 ParseFloat 精确还原原浮点值的最少数字。本文区分 g 与 f 的用途,说明 bitSize 如何对应 float32 和 float64,并给出展示格式与可逆文本的选择方法。195 收藏 -
io.OffsetWriter 把逻辑偏移映射到基准偏移之上,Seek 返回的是逻辑位置,Write 和 WriteAt 的坐标也不能混看。本文用分段写入场景拆解错位原因,并给出调用约定、边界处理与排查清单。194 收藏 -
bufio.Writer.Available 返回内部缓冲区尚未使用的字节数。本文区分 Size、Buffered、Available 和 Flush,说明写入前后如何判断剩余空间、为什么大写入不等于必然失败,以及 AvailableBuffer 的使用边界。194 收藏 -
Go 的 net.IP.IsLoopback 用于判断 IP 是否属于回环地址。本文从 net.ParseIP 开始,说明 127.0.0.0/8、::1、无效输入、未指定地址与私有地址的区别,并给出可复用的判断代码与测试边界。194 收藏 -
说明Badger迭代器持有的底层引用、预取任务与活动计数,区分Close和事务结束,给出提前返回、循环扫描的清理写法及内存排查注意事项。193 收藏 -
Go HTTP/2 并发升高后请求固定批次排队,通常要先区分每连接流上限、客户端跨连接策略和后端处理变慢。本文说明如何读取证据,并用 net/http 的 HTTP2 配置修复对应边界。193 收藏