Go语言技术文章
-
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 收藏 -
sync.WaitGroup 不能在首次使用后复制,因为复制会把计数器、等待者状态和信号量拆成两份。本文用错误示例说明 Wait 提前返回或一直等待的原因,并给出指针传递、go vet 检查和代码审查清单。124 收藏 -
Go regexp 默认采用左侧优先匹配,调用 Longest 后会改为同一起点取更长结果。本文用最小示例比较两种策略,并说明 CompilePOSIX、子匹配和并发配置的边界。432 收藏 -
用户输入的正则模式不能交给 MustCompile。本文用 regexp.Compile、errors.As 和 syntax.Error 做输入边界、内部诊断与对外提示的分层处理。148 收藏 -
Go sync.WaitGroup 的 Done 少调用一次时,Wait 为什么会一直等待?本文用批处理示例说明任务计数、defer Done、提前返回和 Add/Done 配对的排查方法。263 收藏 -
FindAllStringSubmatchIndex 返回 UTF-8 字节下标。本文用 Go 将完整匹配和子表达式转换为 rune 区间,并处理可选分组的 -1 与字素簇边界。284 收藏 -
解释 Go sync.WaitGroup 把 Add 放进 goroutine 的竞态窗口,并给出先计数再启动任务的安全写法、循环边界和排查清单。308 收藏 -
Go 动态拼接正则表达式时,先用 regexp.QuoteMeta 转义用户输入,才能让点号、括号、加号等字符按字面匹配;本文同时说明模式结构、Compile 错误和替换模板的边界。484 收藏 -
Go encoding/json 默认会忽略未知字段。本文用嵌套类型的 UnmarshalJSON 和独立 Decoder,只对指定对象开启 DisallowUnknownFields,兼顾接口兼容与请求校验。110 收藏 -
Go 类型断言遇到 nil interface 或 typed nil 时,comma-ok 与单值断言的行为并不相同。本文用原创示例解释失败、零值和 panic 的边界。480 收藏 -
Go 的 json.Decoder 调用 UseNumber 后,动态 JSON 数字不再是默认的 float64,而是 json.Number。本文解释类型断言失败的原因,并给出大整数、整数和浮点数的迁移写法。263 收藏 -
解释 Go interface 装入 nil 指针后仍不等于 nil 的原因,拆开动态类型和值的比较规则,并给出 error 返回、类型断言与反射边界的实用处理方式。484 收藏