Go语言技术文章
-
Go 自定义证书链验证失败时,先把 Roots、Intermediates 和 KeyUsages 分开检查:根证书决定信任锚,中间证书负责补链,KeyUsages 决定用途约束。339 收藏 -
介绍 Go 1.27 自定义连接的 TLS ALPN 状态接口,以连接包装器和完整握手示例说明真实状态转发、HTTP 协议配置及客户端与服务端的适用边界。339 收藏 -
Go 1.27 的 vet 会提示一种容易被忽略的错误包装问题:把实现 error 的值类型错误用指针形态传给 %w,随后 errors.As 按指针类型匹配就会失败。本文用最小代码区分值类型、指针类型和 As 目标,给出修复写法与排查清单。339 收藏 -
Go x/text/encoding/unicode 解码 UTF-16 时,代理项只是代码单元,必须由高代理项和低代理项配对才能还原补充平面字符。本文说明孤立代理项为何变成 U+FFFD,以及字节序、BOM 和流式 ErrShortSrc 的排查方法。339 收藏 -
Go Squirrel 使用 PlaceholderFormat 在 Question、Dollar、Colon 和 AtP 之间转换数据库占位符,本文说明统一配置、args 对应、嵌套查询和字面问号的处理边界。339 收藏 -
Go cmp.Or 会按参数顺序返回第一个不等于零值的候选,适合把命令行、环境变量、文件配置和默认值组合成清晰的回退链。本文说明它的配置用法、comparable 约束、解析错误边界与常见误区。339 收藏 -
用 Go os.Root 和 Root.Open 把外部文件名限制在可信目录树内,说明 OpenFile、Root.FS、资源关闭与挂载边界。339 收藏 -
Go net.ParseIP 会把 IPv4 以 IPv4-mapped IPv6 形式返回。本文说明为什么不能直接按切片长度比较,以及如何用 IP.Equal 做语义判断、用 To4 生成统一的 IPv4 表示,并区分真正 IPv6。339 收藏 -
用 Go strings.Cut 拆分可选配置键值时,关键是同时读取 before、after 和 found:只按第一个等号切开,缺少分隔符时明确返回错误,值中的后续等号保持不变。本文封装一个可复用的小函数,并覆盖空键、空值和多余等号。339 收藏 -
讲清 Go encoding/base64 NewDecoder 的流式读取、正常 EOF、尾部不完整输入与底层 Reader 错误如何区分,并给出可直接改造的判断代码。339 收藏 -
Go 使用 os.OpenFile 的 O_APPEND 可以让每次 Write 从文件末尾开始,但它不等于跨进程或跨机器日志方案。本文从一个追加记录小工具出发,说明单次写入、互斥锁、WriteAt、Seek、NFS 与持久性边界。339 收藏 -
Go 的 FileMode 同时包含文件类型、普通权限和特殊权限。本文说明如何只替换权限位,正确构造 File.Chmod 入参,并处理 Unix 与 Windows 的语义差异。338 收藏 -
Go netip.Prefix 解析 CIDR 后为什么还保留主机位?关键在于 ParsePrefix 和 PrefixFrom 都不会替调用者自动掩码。本文说明 Prefix、Masked、Contains 的职责边界,并给出在展示、存储和地址匹配边界处统一规范化的写法。338 收藏 -
Go pprof heap 报告定位不了内存泄漏,通常不是命令少,而是采集窗口、inuse 与 alloc 指标、采样率没有分开处理。本文给出一套可重复的采集和阅读顺序。338 收藏 -
Go WebSocket 断开后没有马上出现错误,常见原因是程序没有持续读取连接。本文用 Gorilla WebSocket 说明 CloseError、读循环、关闭处理器和读超时的边界。338 收藏