Go语言技术文章
-
Zerolog 的 diode.Writer 为了让日志生产者不被慢速输出端阻塞,会把事件放入有容量的非阻塞队列;消费跟不上时,队列满的部分会被丢弃。本文解释丢失原因、missed 告警和关闭策略。472 收藏 -
bytes.NewBuffer 会把传入的 []byte 作为初始缓冲区内容使用,不会替调用方自动复制。本文说明原切片修改为何会影响后续读取,以及如何用 bytes.Clone 或显式复制隔离数据。472 收藏 -
Go runtime/metrics.Read 可以复用同一个 []metrics.Sample,但要区分串行采样、并发底层内存和直方图深拷贝边界。本文给出可落地的定时采样写法。472 收藏 -
Go os.Lstat 的结果通常并不是随机变化,而是读取对象、错误分支或并发替换窗口没有分清。本文用快照、ModeSymlink 和 PathError 说明排查顺序,并给出稳定观察文件状态的写法。472 收藏 -
os.MkdirTemp 不接受 perm 参数,而是按 0700 创建临时目录。本文解释这一安全边界、umask 影响、清理责任,以及多进程确需共享时的处理方式。472 收藏 -
Go flag.FlagSet.VisitAll 会按参数名的字典序遍历所有已注册标志。本文用标准库示例生成稳定帮助清单,解释 VisitAll 与 Visit 的区别、默认值展示、宽度排版和自定义 Usage 的错误处理。472 收藏 -
Go path.Match 返回 false 时,先检查它是否要求整串匹配、通配符是否跨过斜杠、模式是否有语法错误,以及当前数据究竟是 URL 路径还是本地文件路径。472 收藏 -
用只读配置快照配合 atomic.Pointer,可以在热更新时原子替换整份配置,让批处理读取方复用同一个快照引用,减少锁竞争、重复解析和临时分配。本文说明构造、发布、读取与回滚边界。472 收藏 -
用一轮 Tuple 遍历同时收集返回位置、名称和类型文本,生成有序文档记录。提供从包作用域读取函数签名的完整例子,并处理空返回、未命名项和失败情况。472 收藏 -
讲清 Go image.Image.Bounds 返回的坐标域、非零原点、Dx/Dy 尺寸计算,以及 At 和裁剪逻辑中的边界处理。472 收藏 -
Go 1.23 引入的 unique 包可以把重复值映射到可比较的 Handle,但它不是无上限缓存。本文用字符串标签场景说明 unique.Make 的比较方式、Handle 生命周期和不适合使用的业务边界。471 收藏 -
Go 用 os.Stat 判断文件是否存在时,不能把所有非 nil 错误都当成不存在。本文区分缺失、权限不足和其他系统错误,并给出 errors.Is 的安全写法。471 收藏 -
atomic.Uint64.Load 只保证单个数值的原子读取,不会把多个计数器自动组成业务快照。本文用 RWMutex 和 atomic.Pointer 说明组合一致性的实现取舍。471 收藏 -
Go 使用 net/textproto.ReadMIMEHeader 报非法字段时,按缺少冒号、字段名 token、字段值字节和首行缩进四个边界定位,并用原始转义与十六进制日志修复上游输入。471 收藏 -
Go encoding/base64 的 DecodeString、Decode、AppendDecode 会忽略 CR 和 LF,但不会因此放行所有空白。本文梳理换行兼容边界、Strict 的真实作用,以及严格输入的处理方案。471 收藏