Go问答技术文章
-
flate.HuffmanOnly 只做 Huffman 熵编码,不搜索重复字符串。输入很短、字节分布接近均匀、已经完成熵编码,或频繁 Flush 时,DEFLATE 块与同步标记开销可能超过节省的字节。本文说明如何测量并选择模式。262 收藏 -
Go compress/flate 复用解压器时,Reset 会清理内部状态但不会清空调用方的输入和输出缓冲。本文用代码和边界清单定位上一段数据残留、输入游标错位、Close 缺失与字典不匹配。358 收藏 -
flate.NewReaderDict 只初始化解压状态,不会在构造时读取并验证完整数据;字典不一致通常到 Read 或 io.Copy 展开回溯引用时才暴露,而且可能表现为 corrupt input,也可能静默产出错误字节。本文给出诊断与协议修复方法。320 收藏 -
解释 Go bytes.Clone 为什么能让副本与原切片隔离,覆盖切片头、底层数组、长度容量以及 nil 与空切片的边界。209 收藏 -
bytes.Reader 的 Seek 只计算并保存逻辑游标,因此正数位置可以超过底层切片末尾;真正读取时才返回 io.EOF。本文结合源码语义说明原因、后续行为和严格边界写法。347 收藏 -
bytes.Buffer.Next 会像 Read 一样推进读取位置,而 Len 只统计未读部分,所以调用 Next 后长度会减少。本文说明超量读取、Bytes 关系和返回切片生命周期。139 收藏 -
bytes.CutPrefix 未匹配前缀时会返回原始切片和 false,返回值依然有效且不产生副本。本文说明底层数组共享、修改风险、空前缀及 bytes.Clone 的使用边界。303 收藏 -
bufio.Writer 会把第一次底层写入错误保存在内部,后续 Write 和 Flush 都返回这项粘性错误。本文说明部分写入、io.ErrShortWrite、Reset 与安全重试的边界。143 收藏 -
Go bufio.Scanner 报 too many empty tokens,通常不是缓冲区太小,而是自定义 SplitFunc 在 EOF 下反复返回未推进的非 nil token。本文用返回值关系说明根因、修复方式和 Reader 的适用边界。495 收藏 -
Go bufio.Scanner 返回 token too long,通常是单个 token 超过默认缓冲上限。本文说明 Scanner.Buffer 的正确配置时机,并给出长记录切换 bufio.Reader 的处理方案。422 收藏 -
Go archive/zip 的 Writer.Copy 用于原始条目复制,不负责重建文件头。本文解释 Copy、CreateRaw 与 CreateHeader 的边界,并给出修改 ZIP 元数据和重新压缩内容的实现方式。334 收藏 -
Go archive/zip 的 Reader.Open 使用 io/fs 的正斜杠路径语义。本文说明反斜杠导致找不到条目的原因,并给出规范路径访问、原始名称精确匹配和 ErrInsecurePath 处理方案。374 收藏 -
Go archive/zip 出现 directory size overflow 时,先区分单个文件大小、ZIP 中心目录大小和旧实现的 32 位字段限制,再按流式写入、Zip64、Close 错误和消费端兼容性逐项排查。326 收藏 -
排查 archive/zip 注册压缩器后没有调用的问题,重点检查 method ID、CreateHeader、CreateRaw、Copy、Writer 实例与注册时机。467 收藏 -
Go archive/tar 写入 io.Pipe 后在 Close 阻塞,通常是读端没有持续消费导致的同步背压。本文比较 bytes.Buffer、文件和 io.Pipe 的适用场景,并给出带错误传播与取消处理的流式写法。458 收藏