从 Go 1.18 开始我们可以定义类型化Must
代替interface{}
:
func Must[T any](obj T, err error) T {
if err != nil {
panic(err)
}
return obj
}
如何使用:https://go.dev/play/p/ajQAjfro0HG https://go.dev/play/p/ajQAjfro0HG
func success() (int, error) {
return 0, nil
}
func fail() (int, error) {
return -1, fmt.Errorf("Failed")
}
func main() {
n1 := Must(success())
fmt.Println(n1)
var n2 int = Must(fail())
fmt.Println(n2)
}
内部一定会失败main
, when fail()
返回非零error
你甚至可以定义Must
n对于超过 1 个返回参数,例如
func Must2[T1 any, T2 any](obj1 T1, obj2 T2, err error) (T1, T2) {
if err != nil {
panic(err)
}
return obj1, obj2
}