Go语言技术文章
-
html/template 并不是简单地把所有字符串统一转义,而是根据插值所在的 HTML、属性、URL、JavaScript 或 CSS 上下文选择处理方式。本文用最小示例排查转义异常、ZgotmplZ 和安全类型误用。274 收藏 -
Go weak.Pointer.Value 返回 nil 不代表指针损坏,而是弱缓存对象已经不可达。本文用并发安全的缓存示例说明如何判断失效、回源重建、回填弱引用,并解释 GC 与 KeepAlive 的边界。273 收藏 -
json.Unmarshal 解码到 interface{} 或 map[string]any 时,JSON number 默认会落为 float64,可能让大整数标识失去精度。本文对比强类型字段、Decoder.UseNumber 和字符串 ID 三种方案,给出错误处理与安全复查清单。273 收藏 -
Go fuzz 失败语料只有在环境可重建时才真正可复现。本文把 time.Now 与包级随机函数改成可注入时钟和局部随机源,并将时刻偏移、随机种子纳入语料。273 收藏 -
解释 Go 1.24 的 testing.B.Loop 如何自动划定基准计时边界,把初始化和清理排除在循环体耗时之外,并对比传统 b.N 写法的迁移注意事项。273 收藏 -
SetConnMaxIdleTime 用来限制连接在池中连续空闲的最长时间,过期连接可能由清理器或复用前检查惰性关闭。它应与 MaxIdle、MaxOpen 和 MaxLifetime 配合,并通过 DB.Stats 观察淘汰计数。271 收藏 -
C 回调进入 Go 时,关键不是猜线程会不会变化,而是明确运行时接入、线程局部状态、C 指针生命周期、cgo.Handle 和停机顺序。271 收藏 -
Go 批量查询不能只检查 QueryContext 和 Scan。本文用稳定主键游标分批读取数据,并在每页推进游标前检查 Rows.Err、处理 Close 错误与上下文取消,避免把半页结果误判为成功。270 收藏 -
解释 Go 单次 iter.Seq 被重复 range 时的真实行为,对比完整消费与提前停止,并给出快照、工厂函数和 API 注释等安全设计方式。270 收藏 -
Go 客户端配置 TLS 会话缓存后仍可能频繁完整握手。本文区分 HTTP 长连接复用与 TLS 会话恢复,说明 ClientSessionCache、ServerName、进程、LRU 容量和多节点票据密钥的边界,并给出 DidResume 排查写法。270 收藏 -
Go 1.27 的 encoding/json/v2 可以通过 jsontext.Decoder 和 UnmarshalDecode 逐个读取连续的顶层 JSON 值。本文用完整 Go 示例说明 io.EOF 收尾、语法与语义错误边界,并比较单值 Unmarshal、v1 Decoder 与 JSON 数组的选择。269 收藏 -
Go 的 iter.Seq 是由 yield 返回值驱动停止的。本文解释 range 提前 break、iter.Pull 的 stop,以及自建异步生产者为何会继续运行,并给出可复查的资源回收方案。269 收藏 -
本文解释 atomic.Value 首次写入如何固定具体类型,分析值与指针、接口动态类型、nil 写入导致 panic 的原因,并给出稳定包装类型的安全方案。268 收藏 -
解释 Go 旧结构体中 64 位原子字段的对齐和复制边界,给出 atomic.Uint64 迁移、外部布局拆分、32 位构建与 go vet 复查方案。268 收藏 -
Go 的 rows.Scan 成功只说明当前行完成了类型转换,rows.Err 才能确认整个结果集迭代没有在 Next、网络或 context 取消处失败。本文给出可直接复用的处理模板和边界清单。267 收藏