为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
牛魔王的故事 2021-04-01 21:18:44
我已经使用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

    }

}

该“模式”也可以与您自己的接口一起应用,不会干扰现有的实现。


查看完整回答
反对 回复 2021-04-19
?
万千封印

TA贡献1891条经验 获得超3个赞

我强烈建议使用便装的if语句进行错误检查。


if err != nil {

    log.Printf("Error received - [%v]",err)

    return err

}

因为golang没有C#熟悉的try catch块。


并且如果您的方法Check()将返回bool-您仍然需要根据if语句对其进行检查。


查看完整回答
反对 回复 2021-04-19
  • 2 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信