Go语言技术文章
-
Go 的 template.Clone 会复制基础模板及其关联模板命名空间,随后在副本中重新定义 block,便能生成互不污染的模板变体。本文用通知模板小项目演示默认块、局部覆盖、执行与测试。148 收藏 -
Go 的 SetFinalizer 只有在对象变为不可达、GC 发现并完成调度后才可能执行,进程退出不会等待它。本文拆解未执行原因,并用显式 Close、defer 与受控 shutdown 替代退出前清理。159 收藏 -
Go text/template 的 FuncMap 函数可以通过第二个 error 返回值中止 Execute。本文用一个校验函数说明错误传播、ExecError 解包、部分输出和生产边界。151 收藏 -
runtime.Pinner 可在 Go 1.21 及更高版本中显式固定 Go 对象。本文说明 cgo 参数的隐式固定边界、Pin/Unpin 最小写法、嵌套指针规则及跨调用保存指针时的生命周期管理。209 收藏 -
Go 1.24 起 text/template 可直接 range iter.Seq2。本文用 slices.All 演示两个模板变量的绑定方式,并说明空序列、单变量语义、顺序和兼容处理。416 收藏 -
Go 1.26 新增的 errors.AsType 用泛型返回具体错误类型,省掉 errors.As 中声明目标指针和传入地址的样板写法。本文说明包装错误、自定义 As、errors.Join 与旧版本兼容边界。221 收藏 -
SetConnMaxIdleTime 用来限制连接在池中连续空闲的最长时间,过期连接可能由清理器或复用前检查惰性关闭。它应与 MaxIdle、MaxOpen 和 MaxLifetime 配合,并通过 DB.Stats 观察淘汰计数。271 收藏 -
errors.Unwrap 只调用 Unwrap() error,适合单链包装;errors.Join 返回值实现的是 Unwrap() []error,所以直接调用得到 nil。匹配原因应使用 errors.Is 或 errors.As,枚举时再显式处理多子错误接口。122 收藏 -
sql.Named 会创建不带符号前缀的 NamedArg,database/sql 再将名称、序号和值交给数据库驱动。命名占位符是否可用、查询中的符号写法以及值转换规则都由具体驱动决定。290 收藏 -
Go errors.Join 会生成实现 Unwrap() []error 的多分支错误树。errors.Is 会检查根错误并深度优先遍历每个子错误,因此可对多个原因逐个匹配;直接等号和 errors.Unwrap 不适用于该结构。309 收藏 -
Go 1.22 引入的 sql.Null[T] 可以把 NULL 与自定义标量类型放在同一个扫描目标中。本文用 OrderState 和订单编码示例说明类型定义、Scan 调用、Valid 判断,以及 driver.Value 和旧版本兼容边界。415 收藏 -
Go SectionReader 通过 base、当前偏移和 limit 建立固定读取窗口。本文解释 Read 的缓冲区裁剪、ReadAt 的相对偏移、EOF、Seek 与 Size 的边界语义。161 收藏 -
sync.Pool 在池空时只有 New 非 nil 才会创建默认对象。本文用 bytes.Buffer 说明正确初始化、typed nil 陷阱、借用归还封装、状态重置和测试边界。466 收藏 -
io.Copy 不一定走缓冲循环:它会优先调用 WriterTo 或 ReaderFrom。本文用调用顺序、CopyBuffer 边界和适配器示例说明自定义缓冲区为什么没有生效,以及如何正确控制这条路径。239 收藏 -
Go 1.23 起,sync.Map.Clear 可直接删除并发映射中的全部条目,清空后仍能继续 Store 和 Load。本文通过可重置缓存示例说明基本用法、并发写入边界、旧版本兼容方案,以及需要严格换代时的原子指针切换设计。326 收藏