Go教程技术文章
-
Go context.AfterFunc 会在取消后异步执行回调。本文用 stop 返回值、sync.Once 和 done channel 说明如何收敛外部资源的释放所有权,避免取消竞态下重复关闭或提前返回。465 收藏 -
Golang · Go教程 | 1个月前 | 错误处理 · 数据校验 · Go教程 · Go compress/gzip ErrChecksum gzip.Reader io.ErrUnexpectedEOF
Go 的 gzip.Reader 只有在完整读取到 gzip trailer 后才能完成 CRC32 和原文长度校验。本文用原创示例说明如何区分截断数据、校验和错误、非法头部与正常 EOF。347 收藏 -
Go 的 gzip.Writer 可以通过 Reset 复用,但切换输出前必须先 Close 当前 GZIP 流。本文用批处理示例说明 Write、Close、Flush、Reset 的顺序、差异和容易忽略的边界。476 收藏 -
Go 的 gzip.Writer 可以在首次写入前通过 Name 和 ModTime 设置 GZIP 头元数据;本文给出可读回核对的完整示例,并说明 Close、Reset、零值时间和编码边界。215 收藏 -
Go gzip.Reader 默认会连续解压拼接成员。本文用 Multistream(false)、bufio.Reader 和 Reset 逐段取得每个成员的 Header 与正文,并加入单成员大小限制、错误处理和安全落盘边界。312 收藏 -
Go compress/flate 的 Write 可能暂存在压缩器内部,实时传输要在消息写入后调用 Flush,把当前数据和同步标记推到底层 writer;Close 只负责最终收尾。本文用长度帧、io.Pipe 和 io.ReadFull 说明发送、接收与刷新频率的边界。492 收藏 -
Go compress/flate 的 HuffmanOnly 只做 Huffman 熵编码,不再寻找 Lempel-Ziv 重复串。它更适合已经经过 Snappy、LZ4 等 LZ 类压缩、但字节频率仍明显偏斜的数据;普通文本直接使用它往往会牺牲压缩率。本文用原创示例说明选择边界、资源收尾和上线前对比方法。217 收藏 -
Go 的 flate.NewReader 返回值同时实现 flate.Resetter,可在每段独立 DEFLATE 数据开始前调用 Reset 切换输入,复用内部已分配内存。本文给出完整循环,并说明 Close、字典、ByteReader 过读和并发使用边界。488 收藏 -
用 Go compress/flate 的 NewReaderDict 配合同一份预置字典解压 DEFLATE 数据,示范 io.Copy、Close、Reset 的写法,并按字典、输入流和读取边界排查失败原因。178 收藏 -
当 []byte 来自读取缓冲区、sync.Pool 或短生命周期回调时,直接保存会继续共享底层数组。本文说明如何在队列、goroutine 和缓存边界使用 bytes.Clone 获得独立副本,并处理 nil、空切片与复制成本。359 收藏 -
用 Go bytes.Reader 保存绝对偏移、回退试读分支,并区分 Seek 越界、负位置、EOF 与 ReadAt 独立探测。179 收藏 -
使用 bytes.Buffer 分批处理数据时,应先用 Len 判断完整批次,再用 Next 消费固定长度;不足一批的尾部继续留在缓冲区。本文给出同步、异步和收尾写法。128 收藏 -
Go bytes.CutPrefix 可以把可选协议前缀解析成 after 与 found 两个明确结果。本文用协议帧示例说明前缀命中、旧格式兼容、空字段校验和 bytes.Clone 的生命周期边界。283 收藏 -
用 Go bufio.Writer.AvailableBuffer 配合 append 和 strconv.AppendInt 构造短记录,减少循环中的临时切片分配,并说明容量不足、切片生命周期、Flush 和 Go 版本兼容边界。226 收藏 -
Go bufio.Reader.Discard 按固定字节数跳过协议头部,重点说明返回数量、短输入、负数参数和动态长度边界。365 收藏