我是新手 - 只是玩玩它 - 但我已经编写了一个命令行工具 - 我调用了大约 30 个不同的函数,它们 return x, err
。在任何情况下 - 我想做的只是在出现错误时 panic - 基本上一切正常,否则整个事情都会失败。
我知道有 template.Must( t Template*, err Error) Template*
- 我知道我可以做一个 check(something interface{}, err Error) interface{}
- 但要使用它,我必须进行类型转换,这很讨厌。
是否有可能以任何方式制作一种通用函数 panicIfError
以便我可以做类似的事情
x := panicIfError( ioutil.ReadFile( fileName ))
并且 x 有正确的类型吗?
(我看到很多人把 if 放在同一行 - 在我看来这牺牲了太多的可读性 - 目前我唯一的解决方案是为每种类型重载 panicIfError
我使用,这并不理想)
最佳答案
编辑: Go 1.18 添加了泛型,可以创建一个泛型 Must()
函数:
func Must[T any](v T, err error) T {
if err != nil {
panic(err)
}
return v
}
这在 github.com/icza/gog
中可用, 作为 gog.Must()
(披露:我是作者)。
原始答案如下。
您能做的最好的事情就是将其声明为返回 interface{}
类型的值,但这不是您要查找的值(您需要 type assertion 来获取其他类型的值从中输入)。
您希望您的 panicIfError()
函数返回不同的具体类型。这在 Go 中是不可能的。
请参阅 FAQ: Why does Go not have generic types? 中的相关主题
关于go - 是否有可能在 Golang 中制作类型泛型(模板)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690544/