代码之家  ›  专栏  ›  技术社区  ›  C4d

我可以用go中的方法扩展错误接口吗?

  •  1
  • C4d  · 技术社区  · 7 年前

    我和C共事多年,所以我想在Go中找到相似之处(我对这个很陌生)。

    我的目标是:
    error Check() error.Check()


    func (foo T) MyExtension() returnType {
        // return something
    }
    


    interface extension-method

    2 回复  |  直到 7 年前
        1
  •  5
  •   icza    7 年前

    你不能延长 error ,它是内置接口类型。

    您可以通过简单地添加新方法来扩展自己的接口类型。首先,这是“危险的”,因为在go中实现接口是隐式的:没有意图声明。这意味着如果你有 MyError 接口,某些现有类型可能已经实现它并在此基础上构建。如果向其添加新方法,现有类型很可能不再实现它,这很可能会破坏现有代码(除非添加该新方法的实现)。

    从你想要的方法的名字判断( Check() ,最好是创建一个实用程序函数:

    func check(err error) {
        if err != nil {
            panic(err) // Do something
        }
    }
    

    这个“模式”也可以应用于您自己的接口,它不会干扰现有的实现。

        2
  •  0
  •   grayMou5e    7 年前

    我强烈建议使用非正式的if语句进行错误检查。

    if err != nil {
        log.Printf("Error received - [%v]",err)
        return err
    }
    

    因为Golang没有C_所熟悉的试抓块。

    如果您的方法check()将返回bool,那么您仍然需要对照if语句检查它。