gpt4 book ai didi

go - Go 中 "Must"模式的内置帮助程序

转载 作者:IT王子 更新时间:2023-10-29 01:03:47 30 4
gpt4 key购买 nike

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

我说的是 something like this ,但更“内置”。

最佳答案

没有。你会得到的最好的是这样的:

func Must(fn func() (interface{}, error)) interface{} {
v, err := fn()
if err != nil {
log.Fatalln(err)
}
return v
}

然后使用它:

Must(func() (interface{}, error) {
return template.ParseGlob(pattern)
}).(*template.Template)

假设 template.ParseGlob(pattern) 是您要包装的调用。

Go 没有参数多态性,所以这种代码最终将需要类型断言来恢复原始类型,因此(在我看来)付出的努力超过了它的值(value)。对于长链的潜在故障,最简洁、惯用的错误处理就是简单地检查错误并返回错误。推迟清理处理程序:

func MyFunc() (err error) {
a, err := blah1()
if err != nil {
return
}
defer a.Close()
b, err := blah2(a)
if err != nil {
return
}
defer b.Close()
// ad nauseam
}

冗长乏味,但至少它是明确且易于理解的。以下是我编写的两个模块,它们迫切需要参数多态性,可能会给您一些在没有它的情况下进行处理的想法:

关于go - Go 中 "Must"模式的内置帮助程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12434565/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com