我已经使用C#多年了,所以我试图在GO中寻找相似之处(对此我很陌生)。
我的目标:
我想通过byte[]
之类的方法扩展error
接口,以便能够(由于我认为)可读性更好的代码而调用Check()
。
我的当前状态:
我已经学习了如何使用以下语法通过方法扩展类型:
error.Check()
我的问题:
看起来这仅适用于类型,而不适用于接口。到目前为止,我已经看到func (foo T) MyExtension() returnType {
// return something
}
是error
,许多软件包都使用它们来描述其自身错误类型的基础。我不想扩展这种错误类型(从包中),而是想扩展接口以涵盖所有错误类型。我找不到任何语法。由于我也不知道该术语的技术性术语(不是interface
),因此在谷歌搜索中有些失落。
那么有没有一种方法可以通过通用方法扩展extension-method
接口?
答案 0 :(得分:5)
您不能扩展error
,它是内置接口类型。
您可以通过简单地添加新方法来扩展自己的接口类型。一开始这是“危险的”,因为在Go中实现接口是隐式的:没有意图的声明。这意味着,如果您有一个MyError
接口,则某些现有类型可能已经实现了它并以此为基础。如果您向其中添加新方法,则现有类型很可能不再实现它,这很可能破坏现有代码(除非您添加该新方法的实现)。
从所需方法的名称(Check()
)来看,最好是创建一个实用函数:
func check(err error) {
if err != nil {
panic(err) // Do something
}
}
此“模式”也可以与您自己的接口一起应用,不会干扰现有的实现。
答案 1 :(得分:0)
我强烈建议使用便装if语句进行错误检查。
someSpecificRBind(df1,df2, takeIntoAccount=df2)
# col1 col2
# row_1 1 2
# row_2 10 99
# row_3 3 6
因为golang没有C#熟悉的try catch块。
如果您的方法Check()将返回bool-您仍然需要根据if语句对其进行检查。