Go语言技术文章
-
Go sync.Pool适合复用临时对象,但池中对象可能被GC自动丢弃。本文把对象复用链与生命周期指标拆开,用池外原子计数器记录New、Get、Put,再用基准指标判断是否真的降低了分配压力。374 收藏 -
Go 读取证书时,pem.Decode 返回 nil 与 x509.ParseCertificate 返回错误不是一回事。本文用分层代码、错误阶段和边界表定位 PEM 外层格式与 DER/X.509 内容问题。427 收藏 -
Go context发生取消时,ctx.Err()只能告诉你状态,context.Cause(ctx)才能保留首次取消的具体原因。本文用WithCancelCause和超时cause建立一套可排查的错误归因方法。320 收藏 -
Go crypto/x509 中,Certificate.VerifyHostname 可以单独判断证书是否匹配指定主机名。本文说明它检查的字段、HostnameError 的排查方法,以及何时需要改用完整的 Certificate.Verify。272 收藏 -
从请求入口创建截止时间,沿 Go context 调用链传给服务层和下游阻塞操作,并说明局部子预算、取消传播、Err 判断与资源释放的实现边界。179 收藏 -
围绕 Go crypto/x509 的证书链验证,区分叶子证书、中间证书和信任根,说明 SystemCertPool、NewCertPool、VerifyOptions 以及常见错误的排查顺序。222 收藏 -
Go context.Value 适合携带请求级、跨 API 传播的元数据,不适合传业务参数或可选配置。本文用私有键类型、类型安全访问器和调用链示例划清使用边界。392 收藏 -
Go encoding/base64 的 DecodeString、Decode、AppendDecode 会忽略 CR 和 LF,但不会因此放行所有空白。本文梳理换行兼容边界、Strict 的真实作用,以及严格输入的处理方案。471 收藏 -
用 Go os/signal 和 NotifyContext 组织优雅停止:让取消信号传到后台 goroutine,等待资源收尾,并正确释放通知注册,避免服务退出后的 goroutine 泄漏。489 收藏 -
Go encoding/base64 的 NewEncoder 会把不足一个完整分组的尾部数据暂存在内部,必须调用 Close 才能刷新到目标 Writer。本文用最小代码说明正确关闭顺序、StdEncoding 与 RawStdEncoding 的 padding 边界,以及 io.Copy、文件资源和错误处理的组合方式。114 收藏 -
Go os/signal 的 channel 容量不是信号种类数量。本文从 Notify 的非阻塞发送、接收速度和退出生命周期出发,说明容量 1 何时足够,以及何时需要更大的缓冲。157 收藏 -
Go encoding/base64 中,StdEncoding 保留 RFC 4648 的等号填充,RawStdEncoding 关闭填充。本文用同一份输入对比两种输出,并说明解码匹配、URL 字符集与 WithPadding 的选择边界。357 收藏 -
用 Go os/signal 接收 SIGINT 和 SIGTERM,将信号接入服务生命周期,说明缓冲 channel、NotifyContext、Stop 以及重复信号和平台边界。132 收藏 -
用 Go encoding/xml 的 ,attr 标签把 XML 属性映射到结构体,说明指针空值、any,attr 扩展属性、嵌套节点和 Marshal 双向验收边界。147 收藏 -
用 context.WithTimeout 和 exec.CommandContext 给外部命令设置截止时间,区分超时终止、启动失败与正常退出,并说明子进程清理边界。307 收藏