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中文网其他相关文章!