Go语言技术文章
-
Go GC 延迟抖动需要把分配速率、辅助标记 CPU、暂停与调度等待放在同一窗口比较。本文给出支持列表采集示例,说明累计直方图差分、缺失指标和升级对照的判断边界。370 收藏 -
Go pprof 端口不只是一个性能页面:/debug/pprof/ 可能返回命令行、栈信息和运行时 profile,CPU 与 trace 采集还会带来额外开销。本文说明暴露风险,并给出只监听本机、受控访问和发布前检查的方法。214 收藏 -
Go pprof 中 alloc_objects 很高,通常说明运行期间累计创建了很多对象,不等于当前堆占用高或存在内存泄漏。本文用 alloc_space、inuse_objects 和调用栈给出判断与定位方法。485 收藏 -
Go net.Dialer.Control 提供了真正拨号前接触底层连接的入口。本文用 syscall.RawConn.Control 说明如何在回调内读取或设置 socket 参数、传递错误,并处理网络名变化与文件描述符生命周期边界。328 收藏 -
Go 子测试名称里的斜杠会参与分段匹配。本文用原创路由测试说明 -run 的逐段正则、空中间段、锚点与父测试执行规则,并给出名称回滚和叶子用例确认方法。249 收藏 -
Go testing.T.Chdir 会修改整个测试进程的当前工作目录,因此不能和 t.Parallel 或拥有并行祖先的测试混用。本文解释冲突原因,并给出串行使用和显式传递目录两种安全组织方式。359 收藏 -
Go race detector 的创建栈用于追踪任务启动来源,访问栈用于定位冲突读写。通过任务编号、共享对象与互斥锁示例,说明如何确定同步责任并理解报告范围。206 收藏 -
atomic 只保证参与原子操作的那次访问,不会自动把同一变量旁边的普通读写变成安全访问。本文解释混用产生数据竞争的原因,并给出统一 atomic 或改用 Mutex 的写法。465 收藏 -
Go sync.Cond.Wait 必须在持有 Cond.L 时调用。本文说明 Wait 原子释放与重新加锁的边界、为什么要用 for 重新检查条件,以及状态修改、通知和 channel 选择的实用判断。164 收藏 -
reflect.Value.SetString 只有在目标值有效、Kind 为 String 且 CanSet 为 true 时才适合调用。本文说明指针取 Elem、结构体字段和未导出字段的边界。400 收藏 -
Go encoding/binary.Uvarint 返回 n=0 通常表示当前字节切片还不完整,不是已经确认格式错误。本文解释 n 的正负含义、补读缓冲区的方法,以及 Uvarint 与 ReadUvarint 的选择边界。171 收藏 -
Go context.WithValue 取不到值,通常不是 Context 自己丢了数据,而是写入和读取使用了不同的键类型、键值或 Context,或者取值后的类型断言不匹配。本文按这四个边界给出排查与封装方法。290 收藏 -
Go context 取消后下游查询仍在继续,通常不是取消函数失效,而是信号没有传到查询 API,或数据库驱动没有实现可取消路径。本文用 QueryContext、rows 生命周期和驱动边界逐层排查。467 收藏 -
Go reflect.Value.MethodByName 找不到方法时会返回零 Value,不能直接 Call。本文说明 IsValid 判断、导出方法与大小写、值接收者和指针接收者差异,以及反射调用前的签名检查。236 收藏 -
filepath.Glob 返回空结果不一定是模式写错:无匹配时 err 为 nil,模式语法错误时才会返回 filepath.ErrBadPattern。本文给出区分两类结果的写法,并补充跨平台路径和文件系统错误边界。220 收藏