Go语言技术文章
-
区分Go pprof中的CPU样本、采集窗口与业务墙钟时间,通过原创采集示例理解flat、cum和百分比分母,说明等待与并行如何影响读数,以及何时补充trace或业务计时。197 收藏 -
Go 1.26 为 testing.T 增加 ArtifactDir:用它取得当前测试或子测试独立的产物目录,把失败现场写入其中;配合 -artifacts 和 -outputdir,本地与 CI 都能保留测试文件。196 收藏 -
比较Go database/sql结果集的自动关闭、defer和显式关闭,区分QueryContext、Scan、Err、Close的错误入口,用完整读取函数处理早退、迭代失败和关闭错误。195 收藏 -
Go crypto/mlkem 的 Decapsulate 对错误长度密文返回 error,但对长度正确、内容无效的密文不会报错,而是生成与发送方不同的共享密钥。本文按这两条语义说明长度检查、上层认证和错误处理边界。195 收藏 -
sync.Once 的 Do 只负责让初始化函数最多执行一次,初始化函数返回错误并不会自动恢复可重试状态。本文用最小复现说明第一次失败后第二次调用为何不再进入函数,并给出需要重试时的显式状态方案。195 收藏 -
io.OffsetWriter 把逻辑偏移映射到基准偏移之上,Seek 返回的是逻辑位置,Write 和 WriteAt 的坐标也不能混看。本文用分段写入场景拆解错位原因,并给出调用约定、边界处理与排查清单。194 收藏 -
bufio.Writer.Available 返回内部缓冲区尚未使用的字节数。本文区分 Size、Buffered、Available 和 Flush,说明写入前后如何判断剩余空间、为什么大写入不等于必然失败,以及 AvailableBuffer 的使用边界。194 收藏 -
filepath.Rel 只按路径字符串计算相对关系,不会替你解析符号链接。本文用 Go 标准库演示先统一解析根目录与目标路径,再计算相对路径,并拆开解析失败、路径不兼容和目标尚不存在等边界。193 收藏 -
调用方先准备递增有序的切片,把同一份缓冲区反复传给 slices.BinarySearch;文章说明如何区分命中索引、未命中插入位置和结果容器分配。193 收藏 -
Go ServeMux 优先级取决于方法与路径共同限定的匹配集合。用库存路由示例解释严格子集、GET 与 HEAD、固定段与通配符,以及交叉模式为何注册时冲突,并说明兜底路由的取舍。193 收藏 -
Go crypto/ecdh.NewPublicKey 会按指定曲线校验公钥字节并返回 PublicKey。本文说明 NIST 曲线与 X25519 的编码边界、解析错误处理,以及如何在 ECDH 前保证本地私钥和对端公钥使用同一条曲线。192 收藏 -
Go database/sql.ColumnTypes 可以读取动态查询结果的列名、数据库类型名和可空信息。本文说明 Name、DatabaseTypeName、Nullable 的边界,重点解释 Nullable 的 ok=false 为什么不能当成不可空。191 收藏 -
runtime.SetFinalizer 不是定时器,也不保证在进程退出前执行。本文从对象可达性、闭包捕获、引用环、GC 与单一 finalizer 队列几个方向解释对象未及时回收,并给出 KeepAlive、显式 Close 与 AddCleanup 的选择边界。191 收藏 -
围绕 Go maps.Keys 讲清无序键迭代、slices.Sorted 排序、空映射 nil 结果、后续值读取与并发写入边界。191 收藏 -
Go 1.23 起,range over func 可以用 yield 的布尔返回值把消费者的 break 传回函数迭代器。本文用批处理示例说明如何及时停止底层遍历、避免物化中间切片,并区分减少额外分配与保证零分配的边界。190 收藏