Go问答技术文章
-
Go 的 ctx.Err() 只能告诉你已取消或已超时,context.Cause(ctx) 才能携带主动取消的具体原因。本文用原创示例拆开主动取消、超时取消和父子上下文竞争时的判断方式。485 收藏 -
Colly 的 OnError 同时可能面对传输层失败、非 2xx HTTP 响应和解析回调错误。本文用 Response、StatusCode、errors.As 与 ParseHTTPErrorResponse 说明如何分类,并把判断接到日志、重试和异步收尾。485 收藏 -
Go 新循环变量语义改变了 loopclosure 诊断。区分循环声明与外部赋值变量,用显式参数绑定任务,并说明无诊断不代表闭包或共享对象并发安全。485 收藏 -
Go 1.24 起可以用 os.Root 把文件操作限制在指定目录树内。本文用 Root.Remove 删除根目录内文件和空目录,并说明相对路径、越界路径、非空目录与 Root 生命周期的错误边界。485 收藏 -
解释 Gonum LogProb 如何将独立样本似然连乘转为累加,避免小值乘积下溢,并给出正态评分代码、批次汇总及概率密度与混合模型边界。485 收藏 -
Go sync.Map.Swap 会原子替换键值,并返回替换前的 previous 与表示键是否存在的 loaded。本文用固定类型示例说明首次写入、已有键替换、nil 旧值和类型断言边界。485 收藏 -
Go pprof 中 alloc_objects 很高,通常说明运行期间累计创建了很多对象,不等于当前堆占用高或存在内存泄漏。本文用 alloc_space、inuse_objects 和调用栈给出判断与定位方法。485 收藏 -
Go sync.Pool 不是固定容量的对象缓存,Get 可能忽略池、池中对象也可能被自动清理。本文从 New、Get、Put 和 GC 的真实生命周期出发,排查配置看似没有生效的原因,并给出可观测、可安全归还的复用写法。485 收藏 -
Timer Reset 后立刻超时,通常与旧版缓冲计时器通道中的过期值有关。本文对照 Go 1.23 前后语义,给出 chan-based Timer 的复用写法、AfterFunc 边界、版本判断和回退检查清单。484 收藏 -
Golang · Go问答 | 2星期前 | 标准库 · 类型转换 · Go问答 · JSON Go encoding/json UseNumber Decoder json.Number UnmarshalTypeError
Go JSON 使用 Decoder.UseNumber 后,转换失败通常不是 UseNumber 失效,而是 json.Number 与目标字段语义不匹配。本文从原始字面量、Int64/Float64 转换和 UnmarshalTypeError 字段路径入手,定位格式、范围与协议问题。484 收藏 -
StringLen 可避免为查询长度而展开完整字符串,但不保证无限输入或固定耗时。本文说明 int64、Unknown、panic 与字节单位边界,给出长度展示组件及分阶段资源预算建议。484 收藏 -
Go json.Compact 会删除 JSON 结构中的无意义空白,但保留字符串内容,并把结果追加到 bytes.Buffer。本文说明最小调用、错误处理、已有前缀和它与 gzip、Indent、Marshal 的边界。484 收藏 -
sync.Map.Clear 会删除当前条目,但不会替你建立清空期间的业务屏障。本文用并发缓存重置流程说明 Load、Store 的可见性、旧请求回写风险和代际版本号方案。484 收藏 -
Go net.ListenConfig.Listen 报地址已被占用时,先确认 bind 阶段的冲突端点,再核对 PID、tcp/tcp4/tcp6 地址族和程序生命周期,最后才考虑平台相关的端口复用选项。484 收藏 -
Go heap 默认存活视图可能看不到已回收的短命对象。切换 alloc_space、alloc_objects,并结合业务观察窗口、MemProfileRate 与实际堆分配,区分分配压力和存活容量,避免误判泄漏或盲目提高采样精度。483 收藏