首页 > 后端开发 > Golang > 正文

Go可以实现匿名接口吗?

DDD
发布: 2024-11-27 03:44:16
原创
864 人浏览过

Can Go Implement Anonymous Interfaces?

Go 中可以实现匿名接口吗?

考虑以下接口和一个虚构库中的函数:

type NumOp interface {
    Binary(int, int) int
    Ternary(int, int, int) int
}

func RandomNumOp(op NumOp) {
    // ...
}
登录后复制

要实现这个接口,可以定义一个类型例如:

type MyAdd struct {}
func (MyAdd) Binary(a, b int) int {return a + b }
func (MyAdd) Ternary(a, b, c int) int {return a + b + c }
登录后复制

需要功能实现

但是,假设我们需要使用匿名函数来实现一次性场景的接口。这将允许我们编写:

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 {
    // ...
}

func (cop CustomOp) Ternary(a, b, c int) int {
    // ...
}
登录后复制

非功能性实现

如果方法不需要可调用,你可以使用匿名结构体文字:

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

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

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