首页 > 后端开发 > Golang > Go可以实现匿名接口吗?

Go可以实现匿名接口吗?

DDD
发布: 2024-11-26 18:35:13
原创
244 人浏览过

Can Anonymous Interface Implementations Be Achieved in Go?

Go 中的匿名接口实现

简介

Go 允许使用接口定义自定义类型。然而,这就提出了一个问题:对于需要将特定功能实现为简单操作的情况,是否可以建立接口的匿名实现。

函数的匿名实现

伪代码提供的建议创建一个类似于以下内容的匿名实现:

RandomNumOp({
   Binary: func(a, b int) int { return a + b },
   Ternary: func(a, b, c int) int { return a + b + c },
})
登录后复制

限制

但是,这种方法不是在 Go 中直接可行,因为方法声明必须在文件级别定义。因此,要实现具有多个方法的接口,显式方法声明是必要的。

可行的实现

要获得可行的实现,您可以利用现有的结构体或创建一个“虚拟”实现来强调缺乏后果。下面是一个示例:

type DummyOp struct{}

func (DummyOp) Binary(_, _ int) int     { return 0 }
func (DummyOp) Ternary(_, _, _ int) int { return 0 }
登录后复制

或者,考虑一个委托者结构类型,它允许您动态地为方法提供函数:

type CustomOp struct {
    binary  func(int, int) int
    ternary func(int, int, int) int
}

func (cop CustomOp) Binary(a, b int) int {
    if cop.binary != nil {
        return cop.binary(a, b)
    }
    return 0
}

func (cop CustomOp) Ternary(a, b, c int) int {
    if cop.ternary != nil {
        return cop.ternary(a, b, c)
    }
    return 0
}
登录后复制

示例用法:

RandomNumOp(CustomOp{
    binary: func(a, b int) int { return a + b },
})
登录后复制

非功能性实现

如果您的实现不需要功能性方法,您可以使用匿名结构体文字:

var op NumOp = struct{ NumOp }{}
登录后复制

以上是Go可以实现匿名接口吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板