Go 中“Must”模式的内置助手

Ale*_*x B 5 go

是否有更多内置包装器来制作返回(X, error)成功执行或中止的函数,例如regexp.MustCompile

我在谈论这样的事情,但更多的是“内置”。

Pak*_*ula 11

从 Go 1.18 开始,我们可以定义 typedMust而不是interface{}:

func Must[T any](obj T, err error) T {
    if err != nil {
        panic(err)
    }
    return obj
}
Run Code Online (Sandbox Code Playgroud)

使用方法: 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)
}
Run Code Online (Sandbox Code Playgroud)

当返回非零main时,必须在内部失败fail()error

您甚至可以为超过 1 个返回参数定义Mustn ,例如

func Must2[T1 any, T2 any](obj1 T1, obj2 T2, err error) (T1, T2) {
    if err != nil {
        panic(err)
    }
    return obj1, obj2
}
Run Code Online (Sandbox Code Playgroud)