我在C#上工作多年了,所以我试图在GO中寻找相似之处(我对此非常陌生)。
我的目标:
我希望通过像error这样的方法来扩展接口error.Check(),这样我就可以仅仅因为一段(在我看来)更好的可读性代码而调用error.Check()。
我的当前状态:
我已经学习了如何使用以下语法通过方法扩展类型:
func (foo T) MyExtension() returnType {
// return something
}我的问题:
看起来这只适用于类型,而不适用于接口。正如我到目前为止所看到的,error是一个interface,许多包都使用它来描述它们自己的错误类型的基础。我不想扩展这种错误类型(从包中),而是希望扩展接口以涵盖所有这些错误类型。我找不到任何语法。因为我也不知道这个词的技术术语(它不是extension-method),我有点迷上谷歌了。
那么,是否有一种方法可以通过通用方法扩展error 接口?
发布于 2018-08-08 13:45:52
您不能扩展error,它是内置的接口类型。
您可以通过简单地添加新方法来扩展自己的接口类型。这在一开始是“危险的”,因为在Go中实现接口是隐含的:没有意图声明。这意味着如果您有一个MyError接口,一些现有类型可能已经实现它并在此基础上进行构建。如果向其添加新方法,则现有类型很可能不再实现它,这很可能会破坏现有代码(除非添加该新方法的实现)。
从您想要的方法(Check())的名称来看,最好是创建一个实用程序函数:
func check(err error) {
if err != nil {
panic(err) // Do something
}
}这种“模式”也可以应用于您自己的接口,它不会干扰现有的实现。
发布于 2018-08-08 13:47:09
我强烈建议使用随意的if语句来检查错误。
if err != nil {
log.Printf("Error received - [%v]",err)
return err
}因为戈朗没有尝试过C#熟悉的catch块。
如果您的方法Check()将返回bool,则仍然需要对照if语句检查它。
https://stackoverflow.com/questions/51748103
复制相似问题