Go语言技术文章
-
time.Ticker.Stop 只停止后续计时,不会关闭 ticker.C。本文用可复现的 Go 代码说明停止、退出和取消之间的边界,并给出不会卡住的定时任务收尾写法。498 收藏 -
Go 的 sync.Map.Clear 可以一次清空映射中的全部条目,但它只适合明确的批量失效场景。通过并发读写示例、基线测量和结果核对,说明 Clear 的可见性、成本与替代方案。498 收藏 -
Go runtime.GOMAXPROCS 改小后延迟变高,常见原因是可运行 goroutine 受限后排队等待;但在容器中设得过大又可能触发 CPU throttling。本文从 CPU 配额、调度并行度和尾延迟三条线说明如何判断参数边界。497 收藏 -
多个 Go 生产者不要争抢 close 权限:用独立停止信号让生产者退出,用 sync.WaitGroup 确认全部结束,再由唯一协调者安全关闭输出通道。497 收藏 -
Go 中目录名与 package 名不一致通常不会直接导致 import 失败:import path 负责定位目录,package 声明决定默认调用前缀。本文用最小结构拆解 undefined、路径错误和同目录多包名问题,并给出显式别名与 go list 排查方法。497 收藏 -
Go runtime.SetFinalizer 只能作为非内存资源释放的兜底,不能替代显式 Close。本文从 GC 触发时机、进程退出、循环引用、KeepAlive 和幂等关闭几个边界说明正确的资源生命周期设计。497 收藏 -
Go net.Pipe 没有内部缓冲,Write 即使只写少量数据也要等待对端 Read。本文解释阻塞原因,给出并发读写、deadline 和 Close 的排查与处理方式。497 收藏 -
Go 1.26 为 testing.T、testing.B 和 testing.F 增加 ArtifactDir。本文用一个测试产物写入场景,讲清 -artifacts、-outputdir 与临时目录的保留边界。497 收藏 -
Go 1.27 为 hash/maphash 增加 Hasher 与 ComparableHasher。若键类型可比较且业务相等性就是 ==,ComparableHasher 已经够用;需要忽略大小写、按字段比较或支持不可比较值时,应实现满足一致性和无状态要求的自定义 Hasher。497 收藏 -
sync.OnceFunc 不只是把 sync.Once 包了一层:初始化函数一旦 panic,返回函数会记住同一个 panic 值,并在后续调用中再次抛出。本文用最小代码拆开执行次数、并发等待与失败缓存的边界。497 收藏 -
flag.FlagSet.Set 不只是在 Parse 之后补一个值:它会调用目标 flag 的 Value.Set,成功后把该参数记入 actual,重复赋值则按调用顺序覆盖。本文用子命令配置示例说明默认值、Set、Parse 与 ContinueOnError 的边界。497 收藏 -
io/fs.ValidPath 接收的是文件系统内部路径,不是操作系统原生路径。本文从拒绝 .、.. 和斜杠的现象入手,拆开清理、校验与 Open 调用之间的边界。497 收藏 -
用 Go 标准库 net/http 的 ResponseController.Flush 实现分段响应,结合 httptest 验证首段数据何时可读,并说明 ResponseWriter 包装、代理缓冲和错误处理边界。497 收藏 -
用一个分页读取场景说明 Go 1.23 range over function 的提前停止语义,拆开 yield 返回 false、错误保存和调用方收尾之间的边界,给出可运行的 iter.Seq 示例与验收方法。497 收藏 -
使用 Go slices.SortStableFunc 按结构体字段排序,掌握等值元素保序、多字段比较、降序规则与原地修改边界。496 收藏