Go语言技术文章
-
Go testing.F 找不到失败语料时,先看 testdata/fuzz/FuzzName,再区分只读包回退到 GOCACHE/fuzz 的情况,并用 FuzzName/hash 精确重跑。136 收藏 -
strings.Builder 的 Grow 只预留后续字节容量,String 后继续写入通常不是禁用操作;真正需要警惕的是复制非零 Builder、误把容量当长度,以及负数参数触发 panic。398 收藏 -
解释 Go 原生 fuzz 测试中 testing.F 入口、testing.T 回调、f.Add 种子与失败语料的职责关系,并给出可运行的 go test 命令。138 收藏 -
strings.Builder.Grow 传入的是额外可写字节数,不是最终总容量。本文用 Len、Cap 和 UTF-8 字节预算拆解如何预估容量、控制上界并避免过度分配。292 收藏 -
解释 Go 表驱动并行测试为什么会读到同一个循环变量,给出 tc := tc 的兼容写法,并区分 Go 1.22 语义、浅复制和共享资源问题。435 收藏 -
Golang · Go教程 | 3天前 | 标准库 · 正则表达式 · Go教程 · 数据导入 · CSV解析 · csv Go encoding/csv csv.Reader regexp.Split
解释 Go regexp.Split 为什么不能可靠解析复杂 CSV,展示字段内逗号、转义引号和换行的边界,并给出使用 encoding/csv.Reader 的读取与错误处理方式。112 收藏 -
解释 Go testing.T.Parallel 为什么要等父测试函数返回,拆解 t.Run、并行栅栏、共享资源和调试检查方法。409 收藏 -
Go regexp.Split 的 n 参数不是分隔符数量,而是返回子串数量上限。n<0 返回全部结果,n=0 返回 nil,n>0 最多返回 n 个子串并保留最后的未切分文本。451 收藏 -
讲清 Go testing.T.Parallel 的暂停边界,示范如何隔离表驱动子测试的切片、map、结果和临时资源,并用 -race 与 -count 排查共享状态污染。197 收藏 -
Go 的 regexp.Split 遇到空匹配时,结果取决于匹配区间、相邻空匹配抑制规则和 n 参数。本文用索引和小例子说明如何判断。219 收藏 -
go test -race 输出的 goroutine 栈不是一条普通调用链。本文按冲突访问栈、goroutine 创建栈和共享数据位置拆解报告,说明如何从函数名与行号回到真正的读写代码,并完成修复复查。359 收藏 -
Go regexp.Longest 会修改 Regexp 实例的匹配策略,不能与其他方法并发调用。本文说明如何在启动阶段完成配置,让多个 goroutine 安全复用共享正则,并隔离不同匹配策略。366 收藏 -
go test -race 变慢通常是正常的检测成本。本文教你固定比较口径,拆分编译、执行、内存和覆盖率影响,并判断哪些测试值得长期运行 race。473 收藏 -
Go regexp.Longest 适合放在 token 候选识别层:它改变同一个正则的左侧最长匹配偏好,但不负责多条词法规则的全局仲裁、优先级或 Parser 语法组合。292 收藏 -
go test -race 能发现共享变量数据竞争,是因为它在实际运行时记录普通读写,并依据 happens-before 关系判断并发访问是否缺少同步。本文用一个共享计数器说明报告结构,并比较 mutex、channel 与 atomic 的修复边界。322 收藏