我是新手——只是在玩它——但我写了一个命令行工具——我调用了大约 30 个不同的函数return x, err
。在每种情况下-我想做的只是在出现错误时惊慌失措-基本上一切正常,或者整个事情都失败了。
我知道有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()
可以创建一个泛型函数:这在
github.com/icza/gog
, as中可用gog.Must()
(披露:我是作者)。原始答案如下。
您能做的最好的事情就是声明它返回一个 type 的值
interface{}
,但这不是您要寻找的(您需要类型断言才能从中获取其他类型的值)。您希望您的
panicIfError()
函数返回不同的具体类型。这在 Go 中是不可能的。请参阅常见问题解答中的相关主题:为什么 Go 没有泛型类型?