Go教程技术文章
-
Go 的 io.NewSectionReader 可以把支持 ReaderAt 的数据源包装成固定区间读取器。本文用分段文件读取场景说明 offset、length、Read、ReadAt、Seek、Size 与 EOF 的关系。424 收藏 -
用 Go BinaryMarshaler 与 BinaryUnmarshaler 实现自定义二进制类型,明确输入副本、独立编码结果、错误原子性以及长度和版本处理,避免切片共享带来数据联动。283 收藏 -
用 Go io.TeeReader 可以在读取文件、请求体或消息流时同步写入 hash.Hash,边读边计算 SHA-256 而不必先缓存完整输入。本文说明完整消费、摘要结果和写入错误之间的关系,并比较 TeeReader、MultiWriter 与 io.ReadAll 的适用场景。248 收藏 -
Go 基准的 ReportMetric 只报告传入的数值,不会自动按 /op 归一化。本文用批处理示例说明总量除以 b.N、固定单次值、单位约束、重复覆盖、计时重置与默认指标的关系。403 收藏 -
Go 的 crypto/rand.Read 保证填满目标切片且不把随机源错误作为普通返回值;需要观察短读、EOF 或可替换 Reader 时,应使用 io.ReadFull,检查 n 与 err,并丢弃不完整随机字节。209 收藏 -
本文说明如何用 testing.T.Setenv 临时修改测试环境变量、自动恢复原值,并解释它为什么不能与 t.Parallel 或并行祖先同时使用。313 收藏 -
Go 比较敏感摘要时,应对等长字节序列使用 crypto/subtle.ConstantTimeCompare;HMAC 校验优先使用 hmac.Equal。本文说明长度不一致会立即失败、返回值如何判断,以及摘要编码和最小测试的边界。468 收藏 -
重复压缩短消息时,每次调用 flate.NewWriter 都会重新建立编解码器。本文围绕 Writer.Reset、Close、Flush 和 Reader 的 Resetter 接口,说明怎样复用编解码器、切换输出目标,并处理池化对象的生命周期与异常大缓冲。460 收藏 -
Go 打包 ZIP 时可通过 FileInfoHeader 或 SetMode 写入模式,再用 CreateHeader 创建条目。本文用普通脚本分发示例说明名称、压缩方式、归档关闭和 Mode 读取,并区分权限记录与目标环境恢复。219 收藏 -
Go 的 archive/tar 会把 PAX 扩展头关联到后续条目。本文用 Reader.Next 顺序读取 tar,说明长路径应看 Header.Name,自定义 PAX 键值应看 Header.PAXRecords,并列出格式判断和兼容边界。408 收藏 -
用 Go filepath.EvalSymlinks 解析符号链接后的目标路径,区分相对路径、目标缺失、权限错误和链接循环等边界。376 收藏 -
Go 可以用 //go:embed 把模板目录编译进程序,再把 embed.FS 交给 html/template.ParseFS 读取。本文重点说明目录匹配、正斜线路径、错误处理和复用方式。495 收藏 -
filepath.Base 会先去掉末尾路径分隔符,再提取最后一个元素;空路径返回点号,只有分隔符的路径返回单个分隔符。本文用边界表和可复用代码说明这些结果,并区分 filepath 与 path 的使用场景。412 收藏 -
用 Go 的 os.ReadFile 读取配置文件时,不要比较错误字符串。本文用 errors.Is 和 errors.As 区分权限不足、路径不存在与其他失败,并通过 %w 保留可追踪的错误链。309 收藏 -
Go 1.24 提供了 os.Root。本文说明如何用 os.OpenRoot 建立目录边界,再通过 Root.Open 打开相对文件,并区分普通子路径、目录回退、越界路径和符号链接的处理方式。127 收藏