Lobsters | 📄 原文链接 | 2026-11-07 收录

给 Go 测试写一个泛型 MustCreate:省掉一堆样板错误处理

来源:mtlynch.io — 2026-11

📋 概述

Michael Lynch 讲一个 Go 测试里的小改进。构造函数返回 (T, error) 时,测试里那段 if err != nil { t.Fatalf } 纯属噪音——测试作者自己知道 "joe123" 是合法用户名。过去的办法是给每个类型写一个 MustCreateX 助手,结果仓库被 MustCreateFoo、MustCreateBar 塞满,扩展性很差。Go 1.18 有了泛型之后,他把它收成一个 testutil.MustCreate[RawInput, CreatedValue](t, create, rawInput),测试里直接写成 store.ReadUser(testutil.MustCreate(t, NewUsername, "joe123"))。类型参数通常由编译器推导,只有解释时才需要显式写出;双参数构造函数再加一个 MustCreate2。函数体内 t.Helper() 让失败行号指回调用点。

🔑 核心要点

💡 金句

这个模式没什么革命性,但它确实让我的 Go 测试更好写,也少了一堆无脑的重复劳动。
← 返回 Lobsters 首页