Go语言技术文章
-
Go select 的 default 在没有就绪通信时会立即返回,放进永久循环容易造成忙等。本文给出删除 default 的阻塞写法、time.Ticker 退避方案,以及 channel 关闭、nil channel 和 context 取消的排查清单。231 收藏 -
Go 泛型切片算法不必一开始就抽象成复杂接口。本文从算法实际操作出发,讲清 []E 与 ~[]E 的选择、元素约束拆分、类型推断和命名切片边界。230 收藏 -
Go 将 JSON 解码到 map[string]any 时数字默认变成 float64。本文用 UseNumber、结构体和边界转换方案保留整数与高精度数字,避免 ID 和金额失真。230 收藏 -
解释 Go gzip.Reader 为什么要在完整读取后仍然 Close,并演示如何分别处理 ErrChecksum、os.File 和 HTTP 响应体的关闭责任。229 收藏 -
围绕 Go 子测试 t.Parallel 的调度边界,区分只读夹具与可变资源,给出每个子测试独立创建、清理和用 -race 重复验证的做法。228 收藏 -
用 Go 的 hash.Hash 和 io.MultiWriter 把同一份字节分发给多个独立摘要实例,讲清 Sum 参数、结果命名、Reset 复用和摘要长度边界。223 收藏 -
用 go:generate 固定生成入口,在 go build 前检查生成结果与源定义是否同步,覆盖命令边界、差异检查、工具依赖和提交策略。220 收藏 -
Go net/http 中 204 No Content 的正确用法:服务端不要写正文,客户端按状态码决定是否解码响应体。210 收藏 -
Go reflect 中 ConvertibleTo、AssignableTo、CanConvert、CanSet 与接口断言职责不同。本文用命名类型、接口字段和动态值示例说明转换、赋值与断言的边界,帮助反射代码减少 panic。206 收藏 -
从临时根路径、目录读写和资源清理三层排查 Go testing.T TempDir 的权限差异,覆盖 GOTMPDIR、Windows 文件占用、子进程等待与并行测试的兼容处理。203 收藏 -
Go使用database/sql遍历Rows时,循环结束不代表读取完整。本文用一个列表函数说明如何同时处理Scan、Close和Rows.Err,避免把部分结果误当成成功响应。203 收藏 -
Go filepath.Glob 无匹配时不会返回错误,真正需要区分的是空结果、ErrBadPattern 和目录范围问题。本文用可复用代码给出排查与封装方法。199 收藏 -
Go fuzz 测试发现崩溃输入后,如何利用 testdata/fuzz 语料目录在普通 go test 中稳定回归。195 收藏 -
Go io.MultiWriter按顺序写入多个Writer,首个错误会截断后续目标。本文用故障示例拆解部分成功语义,并给出全量一致、尽力写入和可重试封装的处理边界。195 收藏 -
用 sync.WaitGroup 负责并发任务的完成计数,再配合带容量错误通道与 errors.Join 汇总每个任务的失败原因,覆盖 Add、Done、Wait、close 的时机和取消边界。188 收藏