Go教程技术文章
-
并发测试里偶尔出现的数据竞争,关键不是反复调整 sleep,而是用 go test -race 读懂两条访问栈,锁定共享状态的所有权,再用 channel、mutex 或 atomic 建立同步关系并反向验证。428 收藏 -
Go 覆盖率不只看总百分比:用 go test 生成 cover.out,再用 go tool cover -func 按函数查看文件、语句数和覆盖率,快速定位该补哪组测试。336 收藏 -
掌握 Go test 的 -run、-count=1 和 -count=N:精确筛选顶层或子测试,排除成功缓存,并重复验证偶发失败。182 收藏 -
Go fuzz 发现失败输入后,不要只记日志。将它保存在 testdata/fuzz/FuzzXxx 目录,修复后用普通 go test 回归;本文说明 f.Add、失败语料文件、复现命令和目录不可写时的处理。326 收藏 -
用 Go 的 testing.B 对比 json.Marshal 与复用 bytes.Buffer 的 json.Encoder,说明如何固定输入、报告分配次数、避免把准备工作计入循环,并正确解释速度、内存和输出换行差异。148 收藏 -
Go 测试里可以用 testing.T.Setenv 临时设置环境变量,测试和子测试结束后由 Cleanup 恢复原值。本文说明缺失值与空值的区别,以及为什么 Setenv 不能和 t.Parallel 或并行祖先一起使用。184 收藏 -
用 Go testing.T.TempDir 为文件测试建立独立临时目录,理解自动清理、并行子测试隔离、路径派生和 GOTMPDIR 的边界。263 收藏 -
用 Go 的 encoding/hex 把二进制 ID 转成稳定的小写十六进制文本,并说明 DecodeString 的输入边界、错误处理和预分配写法。477 收藏 -
Go 处理 URL 参数中的无填充 base64 时,关键是按字母表和填充约定选择 RawURLEncoding,而不是把所有输入都交给 StdEncoding。本文给出判断表、解码代码和兼容排错方法。405 收藏 -
Go 计算大文件 SHA-256 时,不必先把文件读成 []byte。本文用 crypto/sha256.New、os.Open 和 io.Copy 边读取边累计哈希,并说明文件关闭、输出编码、空文件和重复读取的边界。132 收藏 -
Go TLS 客户端使用 x509.NewCertPool 和 AppendCertsFromPEM 从内存加载自定义 CA,并通过 tls.Config.RootCAs 只按指定证书池验证服务器。343 收藏 -
用 net.Resolver.LookupHost 配合 context.WithTimeout 给 DNS 查询单独设定预算,并通过 DNSError、Timeout、Temporary 和上下文错误区分重试、取消与域名不存在。103 收藏 -
使用 Go net/netip.ParseAddr 校验 IPv4、IPv6 和 IPv4-mapped IPv6,再用 Is4In6、Unmap 与 String 输出稳定的规范地址。407 收藏 -
用 Go 的 url.Values、Has、Get 和 ParseQuery 区分查询参数的缺失、空值、重复值与编码错误,并说明 Add、Set、Encode 的写回规则。296 收藏 -
用 Go 的 multipart.Reader 逐个接收多个上传文件,配合 MaxBytesReader 和 LimitReader 控制请求总量、单文件大小,并正确处理 EOF、超限和临时文件清理。441 收藏