Go语言技术文章
-
Go embed 配合 fs.Glob 可以在只读的 embed.FS 中按 path.Match 规则查找内嵌模板。本文给出嵌入、匹配、解析和安全边界的完整写法。323 收藏 -
Go embed.FS 默认保留嵌入目录的完整路径;用 io/fs 的 fs.Sub 可以把某个子目录包装成可复用的 fs.FS 根,让模板、静态资源和通用读取代码只处理根内相对路径。本文说明初始化、下游接入、路径边界和回滚方式。410 收藏 -
Go 的 filepath.Clean 可以按当前操作系统规则清理重复分隔符,但它同时会处理 .、..、空路径和分隔符风格。本文用边界示例说明清理结果、适用位置和性能测量口径。131 收藏 -
Go filepath.Match遵循目标操作系统规则。本文通过反斜杠差异、单文件名筛选函数及预期用例,解释整串匹配、大小写和ErrBadPattern,并区分模式命中与跨平台文件名合法性。142 收藏 -
filepath.WalkDir 遇到根目录初次检查失败时,回调会收到 d=nil 和原始 err。本文用 Go 示例说明如何先处理错误、区分根目录不存在与权限问题,并把遍历结果安全交给上层。475 收藏 -
Write 返回成功不代表数据已经到达稳定存储。本文用 Go os.File.Sync 拆开写入、同步、关闭和文件替换的边界,给出可复用的错误处理写法。463 收藏 -
Go 文件操作失败时,不要比较错误字符串。本文用 errors.Is 配合 fs.ErrNotExist 和 fs.ErrPermission 区分文件不存在、权限拒绝及其它错误,并保留 PathError 上下文。185 收藏 -
Go OpenFile 用创建标志和八进制权限位控制新文件。本文用拒绝覆盖的完整示例解释0600、写入和关闭错误,以及已有文件、umask和Windows权限模型的差异。251 收藏 -
io.ReadAtLeast 读取的是至少 min 个字节,不等于一定只读取 min 个字节。本文说明如何控制缓冲区、解析可变长度消息的固定前缀,并处理 EOF、ErrUnexpectedEOF 和 ErrShortBuffer。194 收藏 -
io.Writer 只保证 Write([]byte),不能直接假设目标一定有 WriteString。本文用 io.StringWriter 和 io.WriteString 说明能力判断、兼容回退,以及包装器带来的边界。252 收藏 -
Go 的 io.CopyN 可以把流中的固定字节数复制到缓冲区,适合读取并保留协议头原始字节。本文说明 written 与 err 的成功判定、输入过短和底层错误处理,并比较它与 io.ReadFull 的边界。276 收藏 -
Go 1.23+ 可以用 maps.All 把 map 暴露为 iter.Seq2。本文从最小封装开始,说明如何组合过滤、提前停止和按需收集,并提醒 map 遍历顺序不可依赖。242 收藏 -
Go 1.23 的 iter.Seq 可以直接用于 range 函数。本文从 yield 的返回值出发,说明 break 怎样提前停止消费、迭代器怎样响应 false,以及自然结束、单次迭代和错误边界。106 收藏 -
Go map 判断指定键是否存在,要使用 comma-ok 双值写法;本文用最小示例说明零值、缺键、nil map 与并发访问的边界。456 收藏 -
maps.Equal 适合比较值可比较的 map;遇到切片或嵌套 map,要用 EqualFunc 把值比较规则交给 slices.Equal 或递归的 maps.Equal。本文整理类型约束、nil 边界和 NaN 键等容易误判的情况。383 收藏