Go教程技术文章
-
Go 中可以通过 Scanner.Split 注册自定义 SplitFunc,按 || 等多字节分隔符读取记录。关键是未遇到完整分隔符时等待数据、EOF 返回余量,并用 Buffer 处理记录长度上限。338 收藏 -
Go 中使用 bufio.Reader.Peek 查看协议头或下一行前缀而不推进读取位置,本文说明逐步探测、切片复制、长行和 ErrBufferFull 的处理边界。150 收藏 -
讲清 Go os.CreateTemp 的目录与 pattern 规则,演示如何按业务前缀创建临时文件,并用 Close、Remove 和 defer 覆盖异常路径清理。117 收藏 -
Go embed.FS 的读取路径相对当前包目录,并统一使用正斜杠。本文用直接读取与 fs.Sub 两种写法说明如何处理目录前缀、跨平台分隔符和常见路径错误。195 收藏 -
讲清 Go fs.WalkDir 遇到权限错误时的回调语义,用 errors.Is 判断权限并返回 fs.SkipDir,保留其他目录继续遍历。253 收藏 -
Go io.Pipe 适合把边生成的数据直接接到 HTTP 上传请求。本文用 multipart 示例说明读写两端、Close 与 CloseWithError、请求取消和 goroutine 收尾,并列出 Content-Length、重试与可重复读取的边界。378 收藏 -
用 Go io.MultiWriter 将同一份输入同时写入文件和 SHA-256 摘要,理解顺序写入、短写、错误中断与临时文件提交,避免文件和校验值不一致。215 收藏 -
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 收藏