Go语言技术文章
-
Go 1.22 起可用的 database/sql.Null[T] 通过 V 和 Valid 保留 SQL NULL 语义。本文用 QueryRow、Rows.Scan 和写回参数说明可空字段的扫描方式、类型边界与常见误区。156 收藏 -
解释 Go database/sql 中 Rows.Next 返回 false 的双重语义,给出 Next、Scan、Err、Close 的正确组合,并说明如何避免迭代失败时静默返回半截数据。171 收藏 -
介绍 Go database/sql 中 sql.Named 的正确用法,讲清具名占位符、NamedArg、参数名前缀、驱动兼容性与错误处理,并给出可复用的多条件查询示例。138 收藏 -
解释 Go sql.Conn.Raw 中 driverConn 的借用生命周期,说明为什么不能跨回调保存底层驱动连接,并给出同步调用、结果复制与 ErrBadConn 处理的安全模板。269 收藏 -
讲清 Go database/sql 中 Rows.Next 返回 false 的双重含义,给出 Query、Scan、Rows.Err 和 Close 的错误边界与可复用代码模板,避免把迭代失败误判为正常结束。440 收藏 -
Go tls.Config 的 KeyLogWriter 能把 TLS 会话密钥写成 NSS key log 格式,方便 Wireshark 解密抓包,但长期启用会扩大密钥泄露面。本文给出受控调试、抓包定位和结束清理的完整做法。248 收藏 -
解释 Go tls.GetCertificate 在空 ServerName 场景下不触发的原因,拆解 Certificates、SNI 与默认证书回调的选择边界。501 收藏 -
围绕 Go tls.Config 的 SetSessionTicketKeys,说明服务端会话票据密钥的默认自动轮换、手动 key ring、多副本同步、旧 key 移除和回滚边界。474 收藏 -
讲清 Go tls.Config.KeyLogWriter 的 NSS key log 用法、文件权限、连接复用边界和调试后的清理方式,帮助定位 TLS 抓包解密问题并避免密钥输出进入生产环境。304 收藏 -
Go 服务端可通过 tls.Config.GetCertificate 读取 ClientHelloInfo.ServerName,按 SNI 从只读证书表选择证书。本文给出默认回退、SupportsCertificate 检查和原子快照热更新写法。359 收藏 -
Go 的 VerifyConnection 明确覆盖普通握手和恢复握手,用于保证自定义连接约束不会被会话恢复绕过。本文结合 DidResume、ClientSessionCache 与 HTTP 长连接复用说明调用边界和排查方法。200 收藏 -
VerifyConnection 可以在 Go 默认的证书链与主机名校验之后追加应用级约束。本文用 SPKI SHA-256 摘要限制服务端公钥,并给出双摘要轮换、会话恢复和错误处理建议。160 收藏 -
Go context 的子任务不是重新获得一段独立超时,而是受父 Context 更早 deadline 约束。本文用可观察的 deadline、Err 和 Cause 排查提前 deadline exceeded,并给出按剩余预算创建子任务的写法。298 收藏 -
从父 Context 的 Deadline 读取剩余时间,先预留收尾余量,再用比例与最大值计算子任务超时。本文给出可复用的预算函数,并说明无截止时间、预算耗尽和并发子任务的处理边界。232 收藏 -
WithoutCancel 会保留父上下文中的值,但主动切断父级取消、截止时间和错误传播,所以 Deadline 返回 ok=false。本文说明这一设计,并给出为后台任务重新设置独立超时的安全写法。361 收藏