Go语言技术文章
-
Go regexp 支持命名捕获组,适合解析带可选字段的日志和配置文本。本文用 SubexpNames、SubexpIndex 和 FindStringSubmatch 区分整体不匹配、可选字段缺失与业务默认值。252 收藏 -
Go 多包测试中,TestMain 不是全局入口:每个包拥有独立测试二进制。本文说明 m.Run 返回码、清理逻辑和 os.Exit 的边界,避免初始化重复、defer 不执行和失败状态丢失。125 收藏 -
Go 中不要把 URL 当普通字符串拼接:路径片段用 URL.JoinPath,查询参数用 url.Values,并且每个动态值只在所属语义层编码一次。149 收藏 -
Go TestMain 初始化失败不能只写 return,否则测试入口可能按 m 的默认退出状态结束。本文说明 m.Run、资源清理、flag.Parse 与 os.Exit 的正确组合。227 收藏 -
Go 处理回调地址时,Path、RawPath、EscapedPath 和 RawQuery 的语义并不相同。本文用 net/url 示例说明路径解码、查询参数、编码斜杠以及 PathEscape 与 QueryEscape 的正确边界。307 收藏 -
Go TestMain 中直接调用 os.Exit 会跳过 defer 清理。本文拆解 m.Run、TestMain 返回和测试包装器的关系,给出失败时仍释放资源、同时保留正确退出码的写法。184 收藏 -
Go net/url 处理中,查询参数、动态路径片段和完整 URL 不能共用一种编码方式。本文用 url.Values、QueryEscape、PathEscape 与 EscapedPath 说明如何只编码查询参数并保留路径斜杠。347 收藏 -
Go 的 t.Setenv 会修改整个测试进程的环境,并在测试结束后恢复,因此当前测试或并行父测试存在时会被禁止。本文解释测试树中的冲突边界,并比较串行测试、配置注入和独立进程三种处理方式。107 收藏 -
用自定义错误承载动作、资源和底层原因,再通过 errors.As 穿过包装层提取结构化上下文,避免解析字符串或丢失错误契约。227 收藏 -
go test 输出 (cached) 时,-count=1 只绕过当前调用的测试结果缓存;go clean -testcache 会让已有测试结果全部失效,但不会清空构建缓存。本文按排查范围说明两者区别,以及如何用 -v 和 GODEBUG 判断是否真正重跑。268 收藏 -
Go 中 errors.Is 判断的是错误树里的目标语义,不是“看起来同类”的类型或文本。本文用 errors.Join 和自定义错误说明如何避免误判。325 收藏 -
go test 显示 (cached) 不一定是代码没更新。本文用 -count=1、GODEBUG=gocachetest=1 和 go clean -testcache 区分正常复用、输入未纳入缓存键与命令参数问题。456 收藏 -
Go 做表单或配置校验时,可以用 errors.Join 汇总多个失败项,用 errors.Is 分别判断错误类别;需要给用户展示每一项时,再读取 Unwrap() []error。214 收藏 -
Go signal.Notify 收不到 SIGTERM 时,先检查通知 channel 是否有缓冲、是否持续读取,再核对 systemd 或容器托管的真实 PID,并区分 SIGTERM 与无法捕获的 SIGKILL。226 收藏 -
用 fs.FS 统一 Go 对磁盘目录和 embed.FS 的读取,讲清 fs.ReadFile、os.DirFS、fs.Sub、路径规则与错误边界。449 收藏