Go问答技术文章
-
weak.Pointer 不会让对象保持可达,但 map 中的弱键不会自动删除。本文用 Go 示例说明如何依据 Value() 返回 nil 清理失效键,并处理并发、保活和惰性扫描边界。448 收藏 -
Go net/http 中,响应 Trailer 不是普通响应头,服务端要在写出响应前声明尾部字段,客户端还要先把 Response.Body 读到 EOF 才能读取最终 Trailer。本文解释声明顺序、读取时机与为空排查方法。448 收藏 -
结构体里放入 sync.Mutex 后,按值传参、赋值或返回都会复制锁的内部状态,可能造成异常解锁、数据竞争和锁失去保护对象。本文从根因、错误写法、指针改造和 go vet copylocks 检查四个方面说明安全设计方式。448 收藏 -
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 tls.Conn.HandshakeContext 被取消后,不应只看 context 错误就继续复用连接。本文结合 HandshakeComplete 拆清握手取消、底层连接关闭和安全回收边界。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 收藏 -
http.DetectContentType 最多只检查输入前 512 字节,不足 512 字节的短内容仍可参与判断,无法识别时返回 application/octet-stream。本文用流式采样示例说明读取上限、默认结果与后续校验边界。446 收藏