Go语言技术文章
-
WaitGroup 只等待对应任务计数归零,不自动等待消费者或刷新缓冲。文章区分 Add 过晚、Done 过早、异步写入遗漏与 Flush 边界,给出独立结果槽和生产消费两种同步方案。448 收藏 -
Go CommandContext 默认只取消 Cmd 对应的直接进程,shell 派生的孙进程和仍持有 stdout/stderr 的 I/O 管道可能让 Wait 继续等待。本文解释取消边界、进程树与管道回收,并给出直接执行、进程组和 WaitDelay 的选择方法。448 收藏 -
Go 闭包捕获循环变量是否出错,取决于模块版本和变量声明方式。本文用最小示例解释 Go 1.22 的按迭代语义、Go 1.21 的 loopvar 预览方式,并给出兼容旧版本的修正写法。448 收藏 -
用 Go iter.Pull2 消费分页 Seq2 时,空页应让生成器自然结束,消费者提前退出则必须调用 stop。本文给出 next、stop 和 defer 的组合写法,并说明空页死循环与并发调用边界。448 收藏 -
Go tls.Conn.HandshakeContext 被取消后,不应只看 context 错误就继续复用连接。本文结合 HandshakeComplete 拆清握手取消、底层连接关闭和安全回收边界。448 收藏 -
Go log/slog 不会替业务字段自动排序。本文用固定属性切片、动态键排序、With 与 Group 的边界,说明怎样让 TextHandler 和 JSONHandler 的日志字段保持可预测顺序。448 收藏 -
Go 的 flag 包默认使用全局 CommandLine。本文用 NewFlagSet 拆出独立参数集合,说明 ContinueOnError 的错误返回、输出重定向和每个子命令独立解析的写法,避免重复注册和解析失败直接退出。448 收藏 -
net/http.Transport 的 IdleConnTimeout 过短时,空闲 keep-alive 连接会提前离开连接池,后续请求更容易重新建连。本文用 httptrace 区分连接复用与新建连接,并给出参数边界、排查顺序和调整方法。448 收藏 -
Go pprof 的 CPU 表里,flat 表示函数自身占用的采样,cum 表示函数连同下游调用链的累计采样。本文用调用关系、命令和误区说明两列该怎样配合阅读。447 收藏 -
同一个 JSON 字段承载多种对象时,先用公共字段确定类型,再用 json.RawMessage 延迟解析 payload。本文给出 Go 中按 kind 选择具体结构的写法,并区分缺少判别字段、未知类型与载荷格式错误。447 收藏 -
Go pprof 看不到短生命周期函数,通常不是函数被忽略,而是 CPU profile 按固定采样点记录调用栈,短调用可能没有撞上采样点,或累计 CPU 占比太低。本文用对照示例说明如何延长采样窗口、读取聚合结果并排除误判。447 收藏 -
Go sfnt.GlyphIndex 返回零且无错误通常表示缺字。本文区分解析与查询错误,给出字符映射检查函数,并比较拒绝、占位和候选字体三种处理方案。447 收藏 -
Go sync.Pool 适合可重建临时对象,不能承担业务缓存的按键读取、过期与命中承诺。结合缓冲复用代码说明输出复制、归还后引用和容量控制。447 收藏 -
解释编辑器原子保存替换文件后单文件监听失效的原因,用完整 Go 示例改为监听父目录并筛选 Event.Name,说明事件位判断、错误处理、重载职责和父目录稳定性。447 收藏 -
go-mp3 是纯 Go 的 MP3 解码器,负责把输入源解码为 16 位小端双声道 PCM 数据,并不直接打开声卡或播放设备。本文用职责边界、读取示例和排障清单说明如何把解码结果交给独立播放后端。447 收藏