Go语言技术文章
-
Go 测试里 t.Setenv 会通过 Cleanup 恢复进程环境,但环境变量属于整个进程,不能与 t.Parallel 或并行父测试混用。本文用一个小型配置测试项目拆开这个限制,给出串行隔离、参数注入和子测试分组的选择边界。325 收藏 -
线上接口偶发慢几百毫秒,等问题出现后再启动完整 trace 往往已经晚了。Go 1.25 的 runtime/trace.FlightRecorder 会把最近一段运行轨迹保存在内存环形缓冲区,异常触发时再导出,本文说明 MinAge、MaxBytes、Start、WriteTo 的最小用法和生产边界。279 收藏 -
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏 -
Golang · Go教程 | 1天前 | golang · https · TLS · Go教程 · 生产运维 · 证书轮换 · atomic.Value Go HTTPS证书热切换 GetCertificate tls.Certificate 证书轮换
Go HTTPS 服务轮换证书时,不必为了替换文件重启进程。本文用 tls.Config.GetCertificate 和 atomic.Value 保存当前证书,演示新连接切换、旧连接保持、加载失败回退与指标核对,给出适合生产灰度的实现边界。267 收藏 -
Go 1.26 为 runtime/pprof 增加了实验性的 goroutineleak profile,可以帮助发现因 channel、锁等并发原语永久阻塞的协程。本文用一个提前返回的收集器复现泄漏,说明启用开关、采样方式、误判边界和回滚检查。257 收藏 -
Golang · Go问答 | 2天前 | golang · 错误处理 · 泛型 · Go问答 · Go 1.26 · errors.As Go问答 Go 1.26 errors.AsType 泛型错误处理
Go 1.26 为 errors 包增加了泛型函数 AsType,让调用方可以直接拿到指定错误类型,减少 errors.As 的目标变量和类型断言。本文从订单校验错误的实际场景出发,对比新旧写法、兼容边界和测试验收方式。255 收藏 -
io.Copy 看起来只是把 Reader 写入 Writer,但 src 的 WriterTo、dst 的 ReaderFrom 以及 bufio.Writer 等包装器会改变实际路径。本文用可运行示例拆开快路径、包装器边界和验证方法,帮助定位复制速度突然下降的问题。251 收藏 -
Go 1.23 引入 range-over-func 与 iter.Seq 后,切片筛选、转换和提前停止可以组成惰性流水线。本文用可运行示例说明 yield、break、slices.Collect 的关系,以及从旧循环迁移时要避开的副作用边界。226 收藏 -
Go 1.26 让 new 函数可以直接接收表达式,适合构造 JSON 可选字段和配置指针。本文从旧写法、版本门槛、兼容回退和最小验证说明哪些代码值得改、哪些不该急着改。226 收藏 -
分页接口里的 page、size 不是普通字符串:负数、超大整数和乘法溢出会把查询范围、内存占用甚至数据库压力一起带偏。本文用 Go 标准库拆开参数解析、上限校验、LIMIT/OFFSET 计算和验收清单。225 收藏 -
Webhook 只校验 HMAC 签名还不够,攻击者仍可能重放一条合法请求。本文用时间戳限制有效窗口,用 nonce 做短期去重,并明确原始请求体、密钥轮换、幂等写入和审计日志的边界,给出 Go 服务可以落地的验签流程。187 收藏 -
Go 的 json.Unmarshal 默认会忽略结构体中不存在的字段。本文用 Decoder.DisallowUnknownFields 给 HTTP JSON 接口加上字段契约,并说明兼容升级、错误定位和生产边界。160 收藏 -
Go 的 encoding/json 使用 omitzero 处理零值字段。本文用 time.Time、空切片和自定义 IsZero 场景,对比 omitempty 的判断并给出接口调整后的验收方法。158 收藏 -
Go 1.21 带来的 log/slog 不只是把日志改成 JSON。本文从一次请求日志难以检索的场景出发,解释结构化字段、Handler、级别过滤和高频日志的取舍,并给出一套可渐进迁移的检查方法。158 收藏 -
Golang · Go问答 | 2天前 | 并发 · time · 定时任务 · Timer · Ticker · Go问答 · 定时器 Go 定时任务 停止 time.Ticker time.After time.NewTimer
Go 里一次性超时、可重置等待和周期任务分别适合 time.After、time.NewTimer 与 time.Ticker。本文用三个小场景对比它们的触发语义、停止方式、慢任务边界和 Go 1.23 定时器变化,给出可直接复用的选择规则。144 收藏