Go语言技术文章
-
Go 的 path 包负责斜杠路径处理,不负责 URL 百分号转义。本文用一个批处理场景说明怎样只转义单个路径片段、避免路径层级被输入打乱,并减少重复组合带来的额外分配。398 收藏 -
pprof 的 goroutine 快照不会保留已结束任务的完整历史,CPU 采样也不保证覆盖每个短实例。通过任务创建前开启的有界 trace,结合 Task、Region 和完成等待观察调度关系,再用同负载比较业务收益。398 收藏 -
解释带 sync.Mutex 的结构体为什么不能随意复制,比较值接收者、指针接收者和容器传参的差异,并给出可运行的验收方法。397 收藏 -
多个 Goroutine 并发执行时,errgroup 可以把首个错误、兄弟任务取消和统一等待放进同一条收敛链。本文给出可直接改造的 Go 写法,并说明 Context 必须传到真正执行 I/O 的位置。397 收藏 -
用 Go 的 container/heap 实现一个按优先级领取任务的队列,说明 Less、Push、Pop、heap.Init、heap.Fix 的配合方式,以及指针接收者、索引同步和并发使用边界。397 收藏 -
Go TLS 握手失败时,先分开检查 TCP 连接地址、ServerName/SNI 和证书 SAN,再用 HandshakeContext 固定错误点、用 ConnectionState 读取证书链,最后在服务端记录 ClientHelloInfo.ServerName 定位虚拟主机选证书问题。397 收藏 -
Go compress/gzip 写入结束时要区分 Flush 与 Close:Flush 只推送待写压缩数据,Close 才会刷新剩余数据并写入 GZIP footer,且不会自动关闭底层文件或连接。397 收藏 -
Golang · Go问答 | 2个月前 | JSON · Go问答 · 接口测试 · Go JSON测试 map比较顺序不稳定 encoding/json测试 reflect.DeepEqual比较JSON cmp.Diff用法
Go JSON 测试失败不一定是数据变了,map 遍历顺序、JSON 成员排列与字节级快照是三个不同问题。本文用反序列化、reflect.DeepEqual 和 cmp.Diff 说明稳健的比较方式。397 收藏 -
Go archive/zip.File.Open 返回的是 io.ReadCloser。本文区分条目读取器与 ZIP 归档读取器的关闭责任,并给出单条函数、批量遍历和错误处理的安全写法。397 收藏 -
time.Now 返回的时间可能同时包含墙上时钟和单调时钟,但 time.Time.Round 是墙上时间计算,会从结果中剥离单调读数。本文按比较、耗时、序列化和 map key 场景说明怎么判断与修复。397 收藏 -
从 no_application_protocol 症状出发,定位 Go TLS 客户端与服务端 NextProtos 无交集的问题,解释空列表与不匹配的差别,并用 NegotiatedProtocol 和回归测试确认修复。397 收藏 -
tar.Header.Format 变成 FormatUnknown,通常表示 Reader 虽能解析条目,却无法把其头部可靠归类为 USTAR、PAX 或 GNU;本文区分未知格式与 ErrHeader,并给出安全转存方式。397 收藏 -
跨语言二进制结构体经常因为 C 或 Python 的对齐填充导致 Go binary.Read 读错字段。本文用显式空白字段、固定字节序和完整错误处理,给出可移植的读取方式。397 收藏 -
Go 解析 JSON 请求时,默认宽松解码、Decoder 严格校验和 RawMessage 扩展区分别适合什么场景?本文用原创示例说明未知字段、必填校验与接口演进的取舍。397 收藏 -
Go 的 JSON 接口经常有一组固定字段和一个随类型变化的 payload。本文用 json.RawMessage 保留可变字段,按类型延迟解析,并区分缺失、null、类型不匹配和整体语法错误。397 收藏