我已经使用C#多年了,所以我试图在GO中寻找相似之处(对此我很陌生)。我的目标:我想error通过一种方法扩展接口,Check()这样我就可以调用error.Check()(因为我认为)可读性更好的代码。我当前的状态:我已经学习了如何使用以下语法通过方法扩展类型:func (foo T) MyExtension() returnType { // return something}我的问题:看起来这仅适用于类型,但不适用于接口。正如我迄今所看到的error是interface,这些会用来许多包来描述自己的错误类型的基础。我不想扩展这种错误类型(从包中),而是想扩展接口以涵盖所有错误类型。我找不到任何语法。因为我也不知道这个技术术语(不是extension-method),所以我在搜索周围有点迷路了。那么,有没有一种方法可以error通过通用方法来扩展接口呢?
2 回答
RISEBY
TA贡献1856条经验 获得超5个赞
您不能扩展error,它是内置接口类型。
您可以通过简单地添加新方法来扩展自己的接口类型。起初这是“危险的”,因为在Go中实现接口是隐式的:没有意图的声明。这意味着,如果您有一个MyError接口,则某些现有类型可能已经实现了它并以此为基础。如果向其添加新方法,则现有类型很可能不再实现它,这很可能破坏现有代码(除非您添加该新方法的实现)。
从所需方法的名称(Check())来看,最好是创建一个实用程序函数:
func check(err error) {
if err != nil {
panic(err) // Do something
}
}
该“模式”也可以与您自己的接口一起应用,不会干扰现有的实现。
万千封印
TA贡献1891条经验 获得超3个赞
我强烈建议使用便装的if语句进行错误检查。
if err != nil {
log.Printf("Error received - [%v]",err)
return err
}
因为golang没有C#熟悉的try catch块。
并且如果您的方法Check()将返回bool-您仍然需要根据if语句对其进行检查。
- 2 回答
- 0 关注
- 212 浏览
添加回答
举报
0/150
提交
取消