我可以通过GO中的方法扩展错误接口吗?

我已经使用C#多年了,所以我试图在GO中寻找相似之处(对此我很陌生)。


我的目标:

我想error通过一种方法扩展接口,Check()这样我就可以调用error.Check()(因为我认为)可读性更好的代码。


我当前的状态:

我已经学习了如何使用以下语法通过方法扩展类型:


func (foo T) MyExtension() returnType {

    // return something

}

我的问题:

看起来这仅适用于类型,但不适用于接口。正如我迄今所看到的error是interface,这些会用来许多包来描述自己的错误类型的基础。我不想扩展这种错误类型(从包中),而是想扩展接口以涵盖所有错误类型。我找不到任何语法。因为我也不知道这个技术术语(不是extension-method),所以我在搜索周围有点迷路了。


那么,有没有一种方法可以error通过通用方法来扩展接口呢?


牛魔王的故事
浏览 213回答 2
2回答

RISEBY

您不能扩展error,它是内置接口类型。您可以通过简单地添加新方法来扩展自己的接口类型。起初这是“危险的”,因为在Go中实现接口是隐式的:没有意图的声明。这意味着,如果您有一个MyError接口,则某些现有类型可能已经实现了它并以此为基础。如果向其添加新方法,则现有类型很可能不再实现它,这很可能破坏现有代码(除非您添加该新方法的实现)。从所需方法的名称(Check())来看,最好是创建一个实用程序函数:func check(err error) {    if err != nil {        panic(err) // Do something    }}该“模式”也可以与您自己的接口一起应用,不会干扰现有的实现。

万千封印

我强烈建议使用便装的if语句进行错误检查。if err != nil {    log.Printf("Error received - [%v]",err)    return err}因为golang没有C#熟悉的try catch块。并且如果您的方法Check()将返回bool-您仍然需要根据if语句对其进行检查。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go