Go语言技术文章
-
Go HTTP 请求重试不要一股脑塞进 Transport:网络级可重放失败适合统一处理,创建和写入接口必须由业务层配合幂等键、结果查询与退避策略,才能避免超时后的重复写入。255 收藏 -
Golang · Go教程 | 1星期前 | Go教程 · 可观测性 · net/http · HTTP客户端 · 请求头注入 http.Client Go RoundTripper HTTP耗时 Transport中间件
本文用一个可复用的自定义 RoundTripper 统一注入调用方请求头,演示如何克隆请求避免污染原对象,并分别记录收到响应头与读完响应体的耗时,同时说明并发安全和响应体关闭边界。500 收藏 -
Golang · Go问答 | 1星期前 | net/http · Go问答 · 性能边界 · 高并发 连接池 http.Transport Go HTTP客户端 http.DefaultClient
Go 默认 Client 可以被多个 goroutine 并发复用,但并发安全不等于超时与连接池边界适合生产流量。本文区分空闲连接、总连接、请求超时和响应体回收,并给出从默认 Transport 克隆配置的判断方法。151 收藏 -
Go JSON API 客户端重试不能只靠循环。本文用 net/http、context 和 JSON 字节重建请求,划分网络错误、429/5xx、4xx 与副作用请求的边界,并限制尝试次数、总超时和退避时间。345 收藏 -
Go HTTP客户端的超时并不等于连接立即释放。本文从总时限、阶段超时、响应体关闭和连接池排队四个角度定位连接长期占用,并给出可直接迁移的配置与检查清单。378 收藏 -
GOMEMLIMIT 是 Go runtime 的软内存限制,不是 cgroup 或操作系统的硬性封顶。本文从统计范围、GC 让步机制、运行指标和并发控制四个方面说明超限原因与配置边界。109 收藏 -
Go 的 template.Clone 会复制基础模板及其关联模板命名空间,随后在副本中重新定义 block,便能生成互不污染的模板变体。本文用通知模板小项目演示默认块、局部覆盖、执行与测试。148 收藏 -
Go 的 SetFinalizer 只有在对象变为不可达、GC 发现并完成调度后才可能执行,进程退出不会等待它。本文拆解未执行原因,并用显式 Close、defer 与受控 shutdown 替代退出前清理。159 收藏 -
Go text/template 的 FuncMap 函数可以通过第二个 error 返回值中止 Execute。本文用一个校验函数说明错误传播、ExecError 解包、部分输出和生产边界。151 收藏 -
runtime.Pinner 可在 Go 1.21 及更高版本中显式固定 Go 对象。本文说明 cgo 参数的隐式固定边界、Pin/Unpin 最小写法、嵌套指针规则及跨调用保存指针时的生命周期管理。209 收藏 -
Go 1.24 起 text/template 可直接 range iter.Seq2。本文用 slices.All 演示两个模板变量的绑定方式,并说明空序列、单变量语义、顺序和兼容处理。416 收藏 -
Go 1.26 新增的 errors.AsType 用泛型返回具体错误类型,省掉 errors.As 中声明目标指针和传入地址的样板写法。本文说明包装错误、自定义 As、errors.Join 与旧版本兼容边界。221 收藏 -
SetConnMaxIdleTime 用来限制连接在池中连续空闲的最长时间,过期连接可能由清理器或复用前检查惰性关闭。它应与 MaxIdle、MaxOpen 和 MaxLifetime 配合,并通过 DB.Stats 观察淘汰计数。271 收藏 -
errors.Unwrap 只调用 Unwrap() error,适合单链包装;errors.Join 返回值实现的是 Unwrap() []error,所以直接调用得到 nil。匹配原因应使用 errors.Is 或 errors.As,枚举时再显式处理多子错误接口。122 收藏 -
sql.Named 会创建不带符号前缀的 NamedArg,database/sql 再将名称、序号和值交给数据库驱动。命名占位符是否可用、查询中的符号写法以及值转换规则都由具体驱动决定。290 收藏