Go语言技术文章
-
用 go list -m -u -json all 生成 Go 模块清单,再用 govulncheck -json ./... 保存漏洞结果,在持续集成中按调用栈、修复版本和周期任务持续跟踪依赖安全。244 收藏 -
Go 的 io.Copy 会优先使用源的 WriterTo 或目标的 ReaderFrom,只有没有快路径时才进入通用缓冲循环;CopyBuffer 主要解决缓冲复用与尺寸实验,手写循环则用于进度、限速、校验等新增语义。本文解释三者的分派、错误处理和基准边界。243 收藏 -
Go 的 sql.DB 是并发安全的连接池句柄,不是单条连接。本文从数据库总容量、服务副本数与 DBStats 指标出发,给出 MaxOpenConns 等参数的估算和校准方法。243 收藏 -
本文用 tls.Config.GetCertificate 与 atomic.Pointer 构建 Go HTTPS 证书热更新:监听端口持续运行,SIGHUP 触发加载,新证书通过密钥、有效期和主机名检查后才原子替换;失败保留旧证书,并说明既有连接、SNI、多证书和上线观测边界。243 收藏 -
用 Go 标准库 ServeMux 表达方法与路径约束,把日志、超时等横切逻辑放进中间件,并让业务错误沿着只写一次的响应出口返回。242 收藏 -
介绍 Go weak.Pointer 的可达性语义,并用 weak.Make、Value、互斥锁与惰性清理实现不延长对象生命周期的并发安全索引。242 收藏 -
Go slog 批量 Handler 的关键不是简单加 channel,而是同时保留 WithAttrs/WithGroup 语义、建立事件快照、处理背压与异步错误。本文给出可扩展的批量提交骨架和关闭策略。240 收藏 -
io.Copy 不一定走缓冲循环:它会优先调用 WriterTo 或 ReaderFrom。本文用调用顺序、CopyBuffer 边界和适配器示例说明自定义缓冲区为什么没有生效,以及如何正确控制这条路径。239 收藏 -
围绕 Go 1.27 泛型方法说明接收者参数、方法参数和类型约束的关系,结合 List[T].Map[R] 讲清类型推断、显式实例化、方法表达式与接口边界。238 收藏 -
testing/quick 默认通过反射生成输入,遇到含不可导出字段的结构体就无法自动构造。本文用自定义 Generator 和 Config.Values 两条路径处理本地类型与 time.Time 等外部类型,并说明随机边界与可复现配置。238 收藏 -
Go 1.23 起,maps.Collect 可以把 iter.Seq2[K,V] 键值序列收集为新的 map。本文从 slices.All 的最小写法讲到自定义 Seq2、重复键覆盖规则,以及 maps.Collect 与 maps.Insert 的选择边界。236 收藏 -
C 位于 Go 垃圾回收器的对象图之外,不能在 cgo 调用结束后随意保存普通 Go 指针。本文从 GC 可追踪性、固定内存和嵌套指针三个不变量出发,对比同步借用、复制到 C 堆、runtime.Pinner 与 runtime/cgo.Handle,并给出代码、风险表和审计清单。236 收藏 -
maps.DeleteFunc 可以在遍历同一个 map 时按条件原地删除。本文说明删除未到达条目的规范语义,并给出纯谓词、稳定顺序、回调副作用和并发访问的处理边界。236 收藏 -
slices.SortedFunc 会收集迭代器并按自定义比较函数排序,但不保证同键元素的原始顺序。本文通过订单案例解释 SortedStableFunc、显式次级键、map 输入顺序与严格弱序比较器的选择。236 收藏 -
sync.Map 主要适合键写入一次后高频读取,或多个 goroutine 各自操作不同键的场景;需要类型安全、同键复合更新、容量计数或一致快照时,普通 map 配合 Mutex/RWMutex 通常更清晰。本文给出判断表、封装写法和上线检查项。235 收藏