Go语言技术文章
-
Go 测试里用 testing.TB.Setenv 设置临时环境变量,再用 t.Cleanup 管理关联状态,可以让测试结束后自动恢复。本文说明清理顺序、并行边界和可执行检查方法。398 收藏 -
Go net/url 中 PathEscape 与 QueryEscape 都是 URL 转义函数,但服务的语义边界不同。本文用特殊字符对比、URL 结构写入和解码检查,说明路径参数与查询参数的正确选择。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问答 | 6天前 | 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 收藏 -
slices.DeleteFunc 会把匹配元素移除,但含指针的切片还要关注尾部槽位是否被清零。本文从 Go 版本行为、底层数组引用和 GC 验收三个角度给出可运行示例,说明什么时候需要关注内存保留以及如何用 cap、runtime.MemStats 和测试确认结果。396 收藏 -
Go 中 := 只有在同一块作用域且至少有一个新变量时才会复用旧 err。进入 if 等内层块后,同名 err 可能变成新变量,导致错误检查和返回值失真。396 收藏 -
用 Go sync.OnceValue 封装一次性初始化函数,理解并发调用、返回值缓存、panic 复现以及与 OnceValues、sync.Once 的选择边界。396 收藏 -
Go 反射调用 Set 失败,先不要把问题归因于类型不匹配。ValueOf 的值拷贝通常不可寻址,指针解引用后才可能获得可设置值;未导出字段和 MapIndex 还有额外边界。本文用 CanAddr、CanSet、Elem 和最小示例快速定位。396 收藏 -
Go 的切片不能直接作为 map key,因为切片不是可比较类型。本文解释编译期限制、interface 动态键的 panic,并给出字符串、数组和结构体三种迁移方案。396 收藏