Go语言技术文章
-
Go generate 未执行预期指令时,区分注释未识别、包未选中、工具失败和输出目录偏移。通过包内生成器示例说明指令格式、工作目录、参数解析与产物责任。501 收藏 -
Go 的 sync.RWMutex 允许多个读者并发,但写锁一旦排队,新读者也会等待。本文通过原创实验和指标拆分,分析写锁等待过久的常见竞争来源,并给出可落地的缩短临界区方法。501 收藏 -
解释 Go os.File.ReadAt 到文件末尾返回部分数据和 io.EOF 的原因,梳理 n、len(b)、off 的判断边界与定长读取处理方式。501 收藏 -
以临时文件辅助函数和并行子测试说明testing.TB.Cleanup的资源归属、后登记先清理规则及与defer、TempDir的区别,避免提前关闭与重复释放。501 收藏 -
Go bufio.Reader 读取协议行时,ReadString 和 ReadBytes 会保留分隔符,ReadLine 会去掉行尾,ReadSlice 还涉及缓冲区生命周期。本文从排查现象出发,给出保留 LF、CRLF 和自定义分隔符的写法。501 收藏 -
Go 使用 encoding/json 解码时,JSON null 会把指针设为 nil,而字段缺失可能保留结构体原值。本文拆开 null、缺失、非 null 和三态字段建模的边界。501 收藏 -
Go 的 http.Request.PathValue 为空,通常不是参数丢了,而是请求没有经过包含命名通配符的 ServeMux 匹配,或测试中的通配符名称不一致。本文从匹配链路、最小实现、httptest 和 SetPathValue 四个场景说明排查与修复方式。501 收藏 -
Go 1.23 起可用 slices.Backward 按降序索引反向遍历切片,无需复制或改变元素顺序。本文给出最小写法、提前停止、索引写回、结构体值语义、空切片和旧版本兼容示例。501 收藏 -
Go 计算大文件 CRC-32 不必先读完整文件。crc32.New 返回可持续写入的 hash.Hash32,配合 io.Copy 即可流式处理;需要进度控制时也能复用缓冲区手动分块。501 收藏 -
Go crypto/rand.Text 当前通常返回 26 个 Base32 字符,但官方只保证至少 128 位随机性并允许未来变长。本文解释长度来源、API 边界和固定长度令牌的显式编码方案。501 收藏 -
围绕 Go 日志管线说明 strings.ToValidUTF8 的正确边界:哪些自由文本适合替换、哪些字段必须拒绝或留存原始字节,以及它与脱敏、控制字符处理和字符集转码的区别。501 收藏 -
Go collate.Numeric 可让名称中的连续数字按数值排序。本文给出记录排序代码,说明语言选项、相等项处理及分页范围,并区分自然数字排序与金额、版本号解析。500 收藏 -
Go 的 iter.Pull 可以把 iter.Seq 这种推送式迭代器转换为 next 和 stop 两个主动拉取函数。本文用一个小型筛选场景说明 ok 结束信号、提前停止和 defer stop 的正确边界。500 收藏 -
Go crypto/mldsa 可以用 Options.Context 区分同一把密钥下的不同业务签名。本文从业务串域的故障现象切入,说明 Context 的长度边界、签名与验签必须保持一致的原因,以及如何用版本化上下文避免跨业务误验签。500 收藏 -
Go HTTP Range 请求返回 200,可能因处理器未实现范围响应,也可能是 If-Range 失配后的正常回退。通过原创 ServeContent 示例讲清请求条件、响应字段、续传交互与代理压缩边界。500 收藏