Go语言技术文章
-
Go 的 gzip.Reader 默认会把多个 gzip 成员拼成一条解压流。需要逐个识别成员结尾时,应关闭 Multistream,在单成员读取到 io.EOF 后用 Reset 判断下一个成员,并区分正常结束、截断和校验错误。233 收藏 -
Go range 遍历字符串时,索引返回的是 UTF-8 rune 在原字符串中的字节起始位置,而不是连续的字符序号。本文用代码区分 byte offset、rune 序号、[]rune 和非法 UTF-8 的处理边界。451 收藏 -
Golang · Go教程 | 3小时前 | 文件处理 · Go教程 · 安全编程 · archive/zip · Go archive/zip 路径穿越 ZIP解压 filepath.IsLocal filepath.Localize
Go 用 archive/zip 解压外部归档时,不能直接拼接成员名。本文说明如何处理 zip.ErrInsecurePath,用 filepath.Localize 和 filepath.IsLocal 拒绝绝对路径、.. 与跨平台分隔符,并用 os.Root 限制写入目录边界。488 收藏 -
Go 的 string 下标访问的是 UTF-8 字节而不是字符。本文用 Go你 示例说明 len、s[i]、range、[]rune 和 unicode/utf8 的边界,避免中文截断和错误计数。474 收藏 -
Go embed.FS 会把匹配到的目录作为一棵只读文件树交给程序。本文用 io/fs.Sub 切出指定子目录,让 HTTP 静态文件和模板只看到自己的资源根,并说明路径、错误和测试边界。369 收藏 -
解释 Go copy 复制切片时返回数量变少的原因,围绕目标切片长度、容量、make 初始化和 append 选择给出排查与修复方法。439 收藏 -
用 Go 的 os.DirFS 和 fs.ValidPath 读取固定目录资源时,先建立 io/fs 路径契约,再区分语法校验与符号链接隔离,避免把相对路径校验误当成完整的根目录安全边界。490 收藏 -
解释 Go nil slice 与空但非 nil 的 slice 为什么在传统 encoding/json 中分别输出 null 和 [],并说明 omitempty、响应 DTO 归一化以及 encoding/json/v2 迁移时的边界。364 收藏 -
Go filepath.WalkDir 默认不会跟随符号链接。本文用一个目录扫描器说明如何识别链接、保留链接记录,并区分 os.Stat 与 EvalSymlinks 的显式跟随行为。127 收藏 -
Go 切片 append 后另一个切片内容跟着变化,通常是因为容量足够时仍共享底层数组。本文用 len、cap 和最小示例区分共享与扩容分支,并给出 copy 与 slices.Clone 的隔离写法。489 收藏 -
Go 中 len 统计 UTF-8 字节数,utf8.RuneCountInString 统计 rune 数量。本文结合有效性检查和截断场景,说明两者结果不同的原因及选择方法。393 收藏 -
Go 的 map 遍历顺序没有语言规范保证,不能直接把 range 结果写进固定断言。本文用独立 key 切片排序的方法生成稳定输出,并说明 nil map、遍历期间修改和生产代码边界。167 收藏 -
用 Go regexp 的命名捕获组解析日志字段,按 SubexpNames 建立索引映射到结构体,并处理匹配失败、空组和重复组名。434 收藏 -
Go 的 map 读取不存在的键时不会报错,而是返回元素类型的零值。本文用具体代码解释单值读取、comma-ok、nil map 与写入 panic 的边界。482 收藏 -
Go 1.22 引入的 cmp.Or 可以从命令行、环境变量、配置文件和默认值中按顺序取首个非零值。本文用多层配置示例说明泛型约束、零值语义、布尔开关和表达式求值边界。236 收藏