Go语言技术文章
-
Go slog 在多个子系统共用 id、status 等字段时,WithGroup 可以把属性放进稳定命名空间。本文用 TextHandler 和 JSONHandler 对比分组结果,并说明动态属性、嵌套分组与空组名的边界。387 收藏 -
后台任务最难排查的不是启动,而是失败后谁负责停下、错误如何回到请求方、剩余 goroutine 怎样确认已经退出。本文用 Go errgroup 组织并发任务,拆解退出信号、错误回收和最小验收方式。385 收藏 -
Go 的 regexp.MatchString 适合快速判断,但把 regexp.Compile 放进热循环会反复解析模式。本文对比一次编译、MustCompile、动态模式和并发复用的边界,给出可运行的性能与输入验收方法。382 收藏 -
从配置校验场景出发,拆开 nil 接口、typed nil 和 reflect.Value.IsZero 的差异,并用可运行的 Go 示例给出安全的判断边界。382 收藏 -
通过 Go 的 os.LookupEnv 与 os.Getenv 示例,说明空字符串和未设置的区别,并给出配置回退、必填校验与测试隔离的实用写法。381 收藏 -
Go 1.24 新增 testing.B.Loop。本文用一个可运行的基准测试说明它和 b.N 写法的区别、计时边界、编译器保活语义,以及升级后如何核对结果。381 收藏 -
Go 的 Request.Cookies 会返回同名 Cookie 的全部值。本文用一个带重复购物车标记的请求,说明如何保留顺序、筛选目标名称,并避免把单值读取误当成完整结果。381 收藏 -
Go 1.24 的 os.OpenInRoot 如何安全打开不可信文件名?本文用目录逃逸、符号链接和错误分支说明 Root 的边界,并给出可核对的最小代码。381 收藏 -
用 Go flag.VisitAll 遍历命令行参数,生成包含默认值、当前值和脱敏结果的配置清单,避免日志暴露密钥并保留可复核的覆盖信息。381 收藏 -
slog.Logger 写日志前会先询问 Handler.Enabled。把昂贵的参数构造放到级别判断之后,可以避免被过滤的日志仍然消耗 JSON 序列化、查询和字符串拼接成本。381 收藏 -
Go 用 encoding/json 将 JSON 解码到 interface{} 或 map[string]any 时,数字默认会落成 float64。本文用订单金额和分页字段的例子说明这种行为的原因,演示 Decoder.UseNumber、json.Number 与结构体解码的选择,并给出精度验证与边界检查方法。380 收藏 -
Go embed.FS 不只适合把模板打进二进制,也可以通过版本目录和启动校验降低模板发布风险。本文演示如何保留可回滚版本、验证文件完整性,并明确热切换不该越过的边界。379 收藏 -
Go 编译时出现 import cycle not allowed,通常不是某一行语法错,而是包依赖回到了起点。本文用 go list 和最小重构示例定位环路,说明如何拆出接口或共享类型,并用测试和依赖检查确认修复没有引入新问题。379 收藏 -
atomic.Uint64 适合维护并发计数,但一个已经使用过的值不能再通过复制传递。本文用请求计数器拆开 Add、Load、Store 和复制副本的边界,说明为什么会触发 go vet 警告,以及如何安全地初始化、读取和测试。379 收藏 -
文件测试最容易留下脏现场:固定目录会互相覆盖,手写清理又常常漏掉失败分支。本文用 testing.TB.TempDir 完成隔离实验,核对目录生命周期、并发测试和清理顺序。379 收藏