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() 让失败行号指回调用点。