Go语言技术文章
-
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 收藏 -
用 Go flag.NewFlagSet 和 ContinueOnError 接管参数错误,区分缺失参数、未知参数与 -h,统一输出 Usage 和退出码。384 收藏 -
Golang · Go教程 | 1个月前 | 字符串处理 · Go教程 · 输入校验 · 字符串校验 unicode/utf8 DecodeRuneInString utf8.ValidString 非法UTF-8
Go string 可能保存非法字节,整段校验用 utf8.ValidString,需要定位时检查 DecodeRuneInString 返回的 RuneError 与 size==1,允许继续处理则用 strings.ToValidUTF8,并记录是否发生清洗。195 收藏 -
Go 生成代码提交后仍被 gofmt 报差异,先统一生成器与 Go 工具链,再用 gofmt -d 定位、gofmt -w 收口,并在 CI 里用 git diff --exit-code 固定检查边界。158 收藏 -
使用 Go log/slog 的 JSONHandler 输出结构化日志,用 request、user 分组区分业务字段,并通过 ReplaceAttr 统一脱敏密码、令牌等敏感值。256 收藏 -
Go benchmark 结果波动时,先划清 b.N 的计时边界,再用 ResetTimer、benchmem、allocs/op、B/op 和 AllocsPerRun 判断分配是否真的影响了结果。152 收藏 -
Go 命令行任务不要直接在信号分支里强行退出。用 os/signal.NotifyContext 取消工作循环,在收尾阶段保存最后确认的进度,并给写盘和资源关闭留出有限时间窗口。413 收藏 -
普通测试单线程运行正常,并不代表 Go 程序没有数据竞争。本文用共享计数器说明调度差异,演示 go test -race 的最小复现、报告定位和原子操作、互斥锁的修复边界。366 收藏