Go教程技术文章
-
io.LimitReader 限制的是包装 Reader 在整个读取过程中的最大字节数,不是每次 Read 的缓冲区大小。本文用原创 Go 示例说明如何设置上限、正确处理 n 与 io.EOF,以及如何用 limit+1 判断源内容是否超限。299 收藏 -
Go strings.Builder 的 String 方法返回当前累计内容,后续 Write 是继续修改 Builder,而不是直接修改已经得到的 string。文章解释 Builder 缓冲区与字符串值的边界,并给出单一所有者、禁止复制非零 Builder、并发隔离和按需 strings.Clone 的处理方式。236 收藏 -
用 Go 的 bytes.Buffer 拼接多段二进制数据时,可以预留容量、连续 Write,并在结果消费或复制后 Reset 复用。本文重点说明 Bytes 的别名生命周期和安全边界。396 收藏 -
讲清 Go time.Timer Reset 返回值的真实含义,比较 Go 1.23 前后的通道语义,并给出单 goroutine、旧版本排空和发布检查的实用写法。346 收藏 -
解释 Go time.Timer Stop 返回 false 的真实含义,区分 Go 1.23 前后的 timer channel 语义,并给出兼容旧版本与现代 Go 的安全复用判断。281 收藏 -
讲清 Go time.ParseInLocation 在夏令时重复本地时间中的边界:固定 IANA 时区,保存 Zone、offset、IsDST、原始文本和 UTC 瞬间,避免把两次出现的本地时间误当成同一条记录。320 收藏 -
Go 的 time.Parse 没有时区时按 UTC 解释文本,time.ParseInLocation 则按传入 Location 解释。本文用同一日期、IANA 时区和比较方法说明两者差异及常见坑。156 收藏 -
Go time.ParseInLocation 适合解析不带时区的业务时间字符串。本文对比 time.Parse 的 UTC 默认行为,说明如何加载 IANA 时区、统一存储 UTC,并处理偏移、缩写和夏令时边界。372 收藏 -
Go gzip.Writer.Flush 会让流式数据更早可见,但高频调用会同步写出、增加同步标记并切碎压缩批次。本文给出消息边界、HTTP 缓冲和压测判断方法。472 收藏 -
讲清 Go compress/gzip 的 Header.Name 如何写入 gzip 文件头、何时设置才生效、字符限制是什么,以及它与输出文件路径的区别。332 收藏 -
Go 的 gzip.Reader 默认会把拼接成员连续解压。若要逐个读取,先关闭 Multistream;每个成员读到 io.EOF 后调用 Reset,再次关闭 Multistream,并确保底层 Reader 实现 io.ByteReader。382 收藏 -
Go archive/zip 的 Writer.Close 负责写入 ZIP 中央目录,忽略其错误可能把半成品当成成功文件。本文用分层错误处理和临时文件发布说明可靠写法。481 收藏 -
Go 的 archive/zip 中,File.Open 返回的是带解压与校验边界的 io.ReadCloser。读取成员后应关闭它;如果外层使用 OpenReader 打开压缩包,还要另行关闭外层 ReadCloser。390 收藏 -
Go archive/zip 读取中文文件名时,应先查看 ZIP 的 UTF-8 标志位与 File.NonUTF8,再决定是否做 GBK 或 GB18030 转码。本文给出默认读取、来源确认、显式解码和路径安全检查的完整边界。363 收藏 -
filepath.WalkDir 不会跟随符号链接进入目标目录,因为它按链接目录项本身判断 IsDir。本文用一个小型扫描器解释 DirEntry、Type、Info 与 EvalSymlinks 的边界。361 收藏