Go语言技术文章
-
用 Go 的 io/fs.Sub 把嵌入文件系统收窄到一个子目录时,真正容易出错的是目录名和 Open 路径的边界。本文通过 embed.FS 示例拆开 fs.Sub、fs.ValidPath 与 fs.PathError 的关系,并给出可复现的排查方法。142 收藏 -
用 bytes.CutPrefix 处理协议前缀,验证前缀命中、空前缀、未命中和返回切片共享等边界,避免手写切片下标时误判输入。142 收藏 -
通过源码调用图与二进制符号表两个证据边界,讲清 govulncheck source、binary 模式的运行方式、结果差异、局限和修复决策。142 收藏 -
Go net.ParseIP 解析 IPv4 时返回十六字节是因为采用了 IPv4-mapped IPv6 表示。本文说明如何用 To4 判断地址族、转换四字节数据,并区分 Equal、To16、ParseCIDR 与 netip 的使用边界。142 收藏 -
解释 Go archive/tar 在 tarinsecurepath=0 下返回 ErrInsecurePath 的原因,给出条目名检查、链接处理和安全解包边界。142 收藏 -
Go 为 exec.Cmd 设置工作目录后,应先赋值 Cmd.Dir,再调用 Cmd.Environ 并写回 Cmd.Env。本文解释正确顺序、重复环境变量覆盖规则,以及 PWD、os.Getwd、getcwd 在符号链接路径下的差异。142 收藏 -
讲清 Go encoding/xml 对缺失元素、空元素和有值元素的映射差异,并用指针字段、TextUnmarshaler 与 UnmarshalXML 保留协议中的可选状态。142 收藏 -
encoding/json/v2 解码到 any 时,JSON 数字仍默认使用 float64。本文给出两种避免精度丢失的写法:已知结构直接声明整数类型,动态结构通过 WithUnmarshalers 保留 jsontext.Value,再按业务显式转换。142 收藏 -
并行基准测试不能把 RunParallel 回调里的 PB.Next 直接替换成 B.Loop。本文区分普通基准循环与并行工作分配,给出 B.Loop 迁移范围、RunParallel 正确写法、计时器边界和 Go 版本兼容检查。142 收藏 -
使用 Go mod graph 精确筛选目标模块的全部父依赖,并结合 go list -m 与 go mod why 区分版本要求、实际选中版本和包导入路径,说明依赖调整前后的记录方法与升级判断边界。142 收藏 -
使用 slices.IndexFunc 按谓词查找切片的首个匹配元素,重点说明索引返回值、未命中时的 -1,以及空切片的安全处理。142 收藏 -
Go filepath.Match遵循目标操作系统规则。本文通过反斜杠差异、单文件名筛选函数及预期用例,解释整串匹配、大小写和ErrBadPattern,并区分模式命中与跨平台文件名合法性。142 收藏 -
gofmt 在不同 CPU 架构上出现列对齐差异,通常是格式化器对齐决策的实现差异。本文说明 Go 1.27 的修复范围,并给出统一工具链、提交检查和升级处理方法。142 收藏 -
Go strings.IndexRune 返回的是 Unicode 字符在 UTF-8 字符串中的首个字节偏移,而不是字符序号。本文说明 -1、0、utf8.RuneError 和非法 UTF-8 的边界,并给出安全切片与删除多字节字符的写法。142 收藏 -
Go fuzz 测试读取相对路径文件失败,通常不是 fuzz 引擎改变了规则,而是相对路径基准与预期不一致。本文说明 go test 的包目录语义、testdata 夹具布局、fuzz 回调的并发边界,以及 go:embed 和显式绝对路径的取舍。142 收藏