C4d*_*C4d 1 extension-methods struct interface go
我和C#一起工作多年,所以我试图在GO中找到相似之处(我对此很新).
我的目标:
 
我想error通过一种方法来扩展接口,因为Check()我能够error.Check()通过(在我看来)更好的可读代码来调用.
我当前的状态:
 
我已经学习了如何使用这种语法通过方法扩展类型:
func (foo T) MyExtension() returnType {
    // return something
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
 
看起来这只适用于类型而不适用于接口.正如我迄今所看到的error是interface,这些会用来许多包来描述自己的错误类型的基础.我不想扩展这个错误类型(从包),而是想扩展接口以涵盖所有.我找不到任何语法.因为我也不知道这个的技术术语(它不是extension-method)我在谷歌搜索时有点迷失.
那么有没有办法error通过一般方法扩展接口?
你不能扩展error,它是一个内置的接口类型.
您只需添加新方法即可扩展自己的界面类型.这首先是"危险的",因为在Go中实现接口是隐含的:没有意图声明.这意味着如果您有一个MyError接口,一些现有类型可能已经实现了它并在此基础上构建.如果向其添加新方法,现有类型很可能不再实现它,这很可能会破坏现有代码(除非您添加该新方法的实现).
从你想要的方法(Check())的名称来判断,最好是创建一个实用程序函数:
func check(err error) {
    if err != nil {
        panic(err) // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)
这种"模式"也可以应用于您自己的接口,它不会干扰现有的实现.