Go语言技术文章
-
base64.NewDecoder 返回的是流式 Reader,前几次 Read 成功不代表尾部合法。持续读到终止错误,再用 errors.As 区分 CorruptInputError 与尾部截断;同时保留部分输出但禁止在错误存在时提交完整结果。354 收藏 -
Go sync.RWMutex.TryRLock 会立即尝试取得读锁,失败时直接返回 false,不会等待。本文说明它适合机会性读取和软降级的场景,以及失败分支、RUnlock 和关键数据一致性的边界。353 收藏 -
recover 只能恢复当前 goroutine 正在展开的 panic。本文用调用栈边界解释父 goroutine 为什么接不住子 goroutine,并给出 worker 包装器、错误回传和资源清理的实现方式。353 收藏 -
Go map 的 range 顺序本来就不保证稳定,测试直接比较遍历结果就会偶发失败。本文用一个小型测试工具拆开集合断言与顺序断言,让 map 测试稳定且不掩盖真实数据错误。353 收藏 -
Go x/text/message 占位参数类型不匹配时,应检查实际翻译模板、参数索引和类型;通过类型封装与输入解析保持各语言模板约定一致。353 收藏 -
Lumberjack主动轮转成功后,原日志器可以继续通过同一实例写入新活动文件。本文提供完整Go示例,说明对象与句柄关系、并发协调、上层缓冲、轮转失败和后台归档的边界。353 收藏 -
Gonum quad.Hermite 面向带 e^(-x²) 权函数的全实数积分。本文解释上下限、节点权重、函数闭包和标准正态期望变量变换之间的关系,帮助排查重复乘权和缩放因子遗漏。353 收藏 -
Go crypto/rand.Prime 接收随机源和二进制位数,成功返回随机素数,bits 小于 2 或底层随机读取失败时返回错误。本文用一个小函数说明位数单位、错误传播,以及 Go 1.26 之后 Reader 参数的实际边界。353 收藏 -
Go container/list 的 Remove 会返回被删除节点的 Value。本文说明 any 类型断言、删除后的节点边界,以及遍历删除时保存 Next 的写法。353 收藏 -
Go bytes.Buffer 判断读取位置是否到末尾,核心看未读长度 Len() 是否为 0;循环读取时还要结合 n 和 io.EOF,区分空切片、容量和真正的读取结束。353 收藏 -
用 Go 的 httptrace.ClientTrace 记录 DNS、连接、TLS、写请求和响应首字节时间,区分连接复用与新建连接,定位一次 HTTP 请求到底慢在哪个阶段。352 收藏 -
Go encoding/json.Encoder.Encode 会省略 JSON 内部无意义空白,但每次编码后固定追加一个换行。本文按单体接口、连续 JSON 流和可读调试三种场景,说明 Marshal、Encoder、TrimSuffix 与 SetIndent 的选择。352 收藏 -
Go HTTP 服务端怎样把 gzip 放到响应边界、正确处理 Content-Encoding 和 Vary,并在流式输出时同时刷新 gzip.Writer 与 HTTP 输出层。352 收藏 -
Go ZIP 文件名乱码通常不是压缩内容损坏,而是文件名字节、UTF-8 标志和解压工具的本地编码解释不一致。本文从 archive/zip 的 Writer、Reader 和 NonUTF8 语义出发,给出创建端与旧包读取端的处理边界。352 收藏 -
Go html/template 会根据动作所在的 HTML 上下文自动转义 URL。本文区分普通 string、template.URL 与 #ZgotmplZ,说明如何识别 URL 边界并安全地建立受信任类型。352 收藏