Go语言技术文章
-
Go 1.21 之后,工具链版本不只由机器上的 go 决定。用 go.mod、GOTOOLCHAIN 和 CI 矩阵配合,能把自动升级、固定版本和失败回退边界讲清楚。488 收藏 -
Go 1.25 将 testing/synctest 从实验特性带入标准库。本文用一个带重试退避的缓存刷新器,演示 synctest.Test、synctest.Wait 和虚拟时间的配合,说明它适合什么测试、哪些网络边界仍要另想办法。405 收藏 -
Go 的 json.Unmarshal 默认会忽略结构体中不存在的字段。本文用 Decoder.DisallowUnknownFields 给 HTTP JSON 接口加上字段契约,并说明兼容升级、错误定位和生产边界。160 收藏 -
Go 1.26 为 runtime/pprof 增加了实验性的 goroutineleak profile,可以帮助发现因 channel、锁等并发原语永久阻塞的协程。本文用一个提前返回的收集器复现泄漏,说明启用开关、采样方式、误判边界和回滚检查。257 收藏 -
Go 1.21 带来的 log/slog 不只是把日志改成 JSON。本文从一次请求日志难以检索的场景出发,解释结构化字段、Handler、级别过滤和高频日志的取舍,并给出一套可渐进迁移的检查方法。158 收藏 -
Golang · Go问答 | 2个月前 | golang · 连接池 · database/sql · Go问答 · 连接池 事务 DBStats rows.Close Go database/sql
Go database/sql 里漏掉 Rows.Close,问题往往不是某一次查询报错,而是连接长期被结果集占着,最终让连接池等待堆积。本文从 DBStats 指标和事务生命周期入手,复现现象,解释 Rows、Tx 与连接归还的关系,并给出可复查的代码边界。374 收藏 -
Golang · Go教程 | 2个月前 | golang · https · TLS · Go教程 · 生产运维 · atomic.Value Go HTTPS证书热切换 GetCertificate tls.Certificate 证书轮换
Go HTTPS 服务轮换证书时,不必为了替换文件重启进程。本文用 tls.Config.GetCertificate 和 atomic.Value 保存当前证书,演示新连接切换、旧连接保持、加载失败回退与指标核对,给出适合生产灰度的实现边界。267 收藏 -
Go 中用 buffered channel 或 golang.org/x/sync/semaphore 限制并发都能工作,但取消传播、加权资源和任务排队方式不同。本文从一个批量抓取场景出发,对比两种实现的边界,并给出选择与验收清单。384 收藏 -
Go 服务把 regexp.Compile 放进请求路径后,p99 往往先于 CPU 告警变差。本文用一组可复现的基线对比,说明预编译、有限缓存和输入边界各自解决什么问题,并给出可验收的 benchmark 方法。271 收藏 -
Golang · Go问答 | 2个月前 | golang · 错误处理 · 泛型 · Go问答 · Go 1.26 · errors.As Go问答 Go 1.26 errors.AsType 泛型错误处理
Go 1.26 为 errors 包增加了泛型函数 AsType,让调用方可以直接拿到指定错误类型,减少 errors.As 的目标变量和类型断言。本文从订单校验错误的实际场景出发,对比新旧写法、兼容边界和测试验收方式。255 收藏 -
Golang · Go教程 | 2个月前 | HTTP · go · 浏览器 · Go Beacon API navigator.sendBeacon 页面关闭上报 Go HTTP 接收 Beacon keepalive fetch
页面关闭、切换标签页或手机锁屏时,普通 fetch 可能来不及把埋点送到服务端。本文用 Go 接收 navigator.sendBeacon 的 POST 请求,拆开 Content-Type、204 响应、队列大小与 keepalive fetch 兜底边界,给出可验证的处理方式。140 收藏 -
Go 1.23 引入 range-over-func 与 iter.Seq 后,切片筛选、转换和提前停止可以组成惰性流水线。本文用可运行示例说明 yield、break、slices.Collect 的关系,以及从旧循环迁移时要避开的副作用边界。226 收藏 -
Webhook 只校验 HMAC 签名还不够,攻击者仍可能重放一条合法请求。本文用时间戳限制有效窗口,用 nonce 做短期去重,并明确原始请求体、密钥轮换、幂等写入和审计日志的边界,给出 Go 服务可以落地的验签流程。187 收藏 -
Go 回调接口是否都应该返回 error?从同步确认、异步投递和后台任务三个场景拆解接口设计,给出可落地的签名、错误归属和判断清单。382 收藏 -
Golang · Go教程 | 2个月前 | HTTP · 连接池 · Go教程 · 性能排查 · net/http · Go HTTP客户端 连接复用 Transport httptrace Response.Body
Go HTTP 客户端请求量上来后,如果 Response.Body 没有按路径读取并关闭,或每次请求都新建 Transport,连接池就很难稳定复用。本文从一个连接数异常的服务场景出发,用 httptrace 验收复用结果,并给出响应体、Transport 参数和回归检查的落地写法。397 收藏