Go问答技术文章
-
Go 中 errors.As 取不到自定义错误字段,通常不是字段不存在,而是目标类型、指针层级或错误链没有对上。本文从故障现场拆开直接返回、%w 包装、值与指针接收者和 Unwrap 的边界,给出可复查的修复清单。166 收藏 -
Go HTTP 连接未复用先查响应体读取关闭与共享 Transport。通过有限响应体封装和 httptrace 说明 HTTP/1.x、HTTP/2、取消及连接池边界,避免把 Close 或延迟变化当作复用保证。165 收藏 -
Go Transport 的 MaxConnsPerHost 限制拨号、活动和空闲连接总数,达到上限可能让请求等待。本文用 HTTP/1 示例解释共享池、trace 信号和响应体释放,并说明 HTTP/2 与调参边界。165 收藏 -
time.Parse 遇到 MST、CST、PST 等时区缩写时,会受 Local 和缩写是否已知影响。本文用 Zone、Location 和 ParseInLocation 拆开定位方法,并给出更稳定的数值偏移解析方案。163 收藏 -
Golang · Go问答 | 5天前 | CGO · 垃圾回收 · Go问答 · Go运行时 runtime.AddCleanup runtime.SetFinalizer runtime.KeepAlive 显式Close 资源生命周期
runtime.SetFinalizer 的触发时机无法承担确定性资源释放。本文从显式 Close、runtime.AddCleanup 和 runtime.KeepAlive 三个边界出发,说明如何替代不及时的 finalizer,并处理父子资源、并发关闭和 cgo 指针规则。162 收藏 -
解释 Go Goldmark 中普通回车、显式硬换行和 WithHardWraps 的渲染差异,并给出中文文本选择 LineBreakStrategy 的判断方法。161 收藏 -
Go io.CopyN 要求复制满指定字节数。本文用完整复制、源数据不足和目标写入失败三个场景,说明如何结合 written 与 error 做准确判断。160 收藏 -
Badger 的 Value 回调参数只适合在回调内读取,ValueCopy 则把值复制到调用方切片。本文对比两种接口的生命周期、资源释放和长事务中的选择方式。159 收藏 -
说明 Go Ristretto 中 NumCounters 与 MaxCost 的职责差异,帮助你按访问频率和成本容量分别配置缓存。159 收藏 -
解释 Go slices.Delete 后 len、cap、尾部零值和外部引用如何共同影响内存释放,并给出清零、Clip 与 Clone 的选择清单。158 收藏 -
bbolt 的 View 回调里再次调用 Update 可能长期阻塞。本文解释单写事务与读事务的生命周期关系,给出读取结果复制到事务外、再独立写入的处理方式,以及回滚、告警和复盘清单。158 收藏 -
Go 1.26+ 的声明式迁移如果没有改写调用点,最常见原因是旧 API 声明前缺少 //go:fix inline。本文同时说明指令位置、适用对象、安全边界,以及复杂自定义 Analyzer 必须提供 SuggestedFixes、通过 unitchecker 与 -fixtool 接入的完整排查方法。157 收藏 -
Go database/sql 查询只取前几行时,提前 break 并不会替调用方表达完整的资源释放意图。本文从 Rows 的接口职责出发,说明为什么拿到结果集后应尽早安排 Close,并区分 Scan、Rows.Err 与 Close 的错误处理边界。157 收藏 -
Go 的 net.Resolver.LookupAddr 反向解析返回的是名称切片,遇到多个 PTR、部分结果、无记录或超时不能只判断一个字符串。本文用带超时的示例说明如何保留可用结果、分类处理错误,并把结果整理成稳定日志字段。155 收藏 -
Go 收到信号后仍不退出,要区分通知送达、工作取消与 main 生命周期。本文说明缓冲信号通道、NotifyContext、stop、完成回执及有界等待,给出 Linux/macOS 的完整示例并明确超时退出的清理代价。154 收藏