Go语言技术文章
-
Go 的 ast.CommentMap.Filter 会新建一个映射容器,但不会深复制 AST 节点、注释组或注释列表。本文拆开说明这些引用的复用边界,并解释 AST 替换时何时使用 Update、何时需要显式复制。173 收藏 -
testing.F.Fuzz 的效果不只取决于随机次数,种子语料是否覆盖边界、代表值和错误路径同样重要。本文用 URL 端点示例说明如何用 f.Add 组织最小种子,并在 fuzz target 内限制字符串长度、端口范围和协议枚举,区分种子回归与持续 fuzz 的职责。173 收藏 -
sync.Once 适合只允许成功初始化一次的场景,但初始化函数一旦返回或 panic,后续 Do 不会重试。本文用显式状态机实现并发等待、失败退避、context 取消与成功缓存,并给出方案选择边界。172 收藏 -
Go pprof heap profile 中样本条目偏少,并不等于程序只分配了这么少的对象。本文区分采样条目、加权读数、inuse 与 alloc 指标,并说明 MemProfileRate 应该怎样影响解读。172 收藏 -
Go GC 变频繁并不一定意味着存活堆持续增长,常见原因是分配速率上升、GOGC 目标变小或内存上限触发更积极的回收。本文用 runtime/metrics 和 pprof alloc_space 区分现象,再给出修正顺序。172 收藏 -
Golang · Go问答 | 3星期前 | 标准库 · 模块 · go · 运行时 · Go模块依赖 BuildInfo runtime/debug.ReadBuildInfo Go构建信息 VCS信息
Go 程序在运行时可以用 runtime/debug.ReadBuildInfo 读取当前二进制携带的模块构建信息。本文拆开 GoVersion、主模块、依赖替换和 Settings 的读取方式,并说明 ok=false 代表什么。172 收藏 -
Go go-i18n 可以通过 LoadMessageFileFS 读取 go:embed 提供的 embed.FS。本文用一个小型命令行示例说明 JSON 消息文件命名、Bundle 初始化、语言偏好匹配和文件路径排错。172 收藏 -
Go netlink的Execute可收集多部分响应,应用再逐条解码协议载荷。结合Linux接口列表只读示例,说明Done处理、固定头与属性边界,以及超时和不完整结果的处理。172 收藏 -
Go snowflake 的 NodeBits 与 StepBits 共享 22 位预算。本文用节点数量和单节点毫秒级突发量拆解容量分配,并说明自定义位数的初始化顺序、节点编号和时钟注意事项。172 收藏 -
Go bloom 的持久化重点不是重新添加原始数据,而是保存 BloomFilter 的位图与参数。本文用 WriteTo 和 ReadFrom 说明怎样写入文件、进程重启后恢复查询,以及损坏文件、原子替换和并发访问的边界。172 收藏 -
Go filepath.Clean 负责词法归一化,filepath.Rel 负责计算相对路径。本文把两者组合成根目录校验函数,处理 .. 越界、根目录本身、绝对路径和符号链接边界。172 收藏 -
Go 1.25 为 sync.WaitGroup 增加了 Go 方法,把任务计数、goroutine 启动和完成收口组合起来。本文用一个固定任务集合说明 WaitGroup.Go 的最小写法、Wait 调用时机、panic 边界,以及什么时候仍应使用 Add/Done。172 收藏 -
Go HTTP 请求超时后仍占资源,通常不是 context 取消失效,而是请求、响应体、连接复用和业务 goroutine 的清理职责没有分开。本文用可执行示例说明正确的取消与关闭方式。172 收藏 -
Go iter.Pull2 把 push 风格的 iter.Seq2 转成 next 和 stop 两个函数。本文用提前匹配、错误返回和完整消费三个场景说明为什么要 defer stop,并梳理重复 Stop、零值返回和并发调用边界。172 收藏 -
go test -shuffle 失败时,先根据是否出现 -test.shuffle seed 区分参数解析、构建或测试运行阶段,再用固定 seed 重现顺序问题。172 收藏