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