Go语言技术文章
-
解释 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 收藏 -
Go context.AfterFunc 会在取消后异步执行回调。本文用 stop 返回值、sync.Once 和 done channel 说明如何收敛外部资源的释放所有权,避免取消竞态下重复关闭或提前返回。465 收藏 -
context.AfterFunc 返回的 stop 为 false 时,可能是回调已经启动,也可能是它此前已经被停止。本文用最小代码说明两种情况的边界,以及如何等待回调真正完成。146 收藏 -
Golang · Go教程 | 2天前 | 错误处理 · 数据校验 · Go教程 · Go compress/gzip ErrChecksum gzip.Reader io.ErrUnexpectedEOF
Go 的 gzip.Reader 只有在完整读取到 gzip trailer 后才能完成 CRC32 和原文长度校验。本文用原创示例说明如何区分截断数据、校验和错误、非法头部与正常 EOF。347 收藏 -
Go compress/gzip 读取中途看似正常、到末尾才返回 ErrChecksum,通常是尾部长度或校验和没有通过。本文从 Reader 的结束语义、完整消费代码和 Writer.Close 收尾顺序说明如何定位与修复。404 收藏 -
Go 的 gzip.Writer 可以通过 Reset 复用,但切换输出前必须先 Close 当前 GZIP 流。本文用批处理示例说明 Write、Close、Flush、Reset 的顺序、差异和容易忽略的边界。476 收藏 -
gzip.Writer.Reset 会让对象回到类似刚由 NewWriter 创建的状态,只保留可复用的压缩器与压缩级别,不继承上一条流的 Header。本文说明正确复用顺序、Header 重配和对象池边界。218 收藏