类型 func 出现接口参数不兼容错误
在 Go 中,声明一个类型函数来接受任何符合 interface{} 的值看起来很简单。但是,调用作为遵循此类型规范的参数传递的函数会引发错误。
此错误源于类型方差的概念,特别是 Go 接口中缺乏协方差。虽然整数 (int) 可以传递给需要 interface{} 的函数,但同样的原则不适用于函数。
具体来说,func(int) 和 func(interface{}) 不是兼容的类型。尽管 int 符合 interface{},但 func(int) 不符合 func(interface{})。这是因为 Go 中的接口是不变的。
要解决此问题,请考虑将 func(int) 传递给需要 interface{} 的函数,如以下示例所示:
package main import "fmt" type myfunc interface{} func foo(x interface{}) { fmt.Println("foo", x) } func add2(n int) int { return n + 2 } func main() { foo(add2) }
在这个例子中,func(int)int实现了interface{},从而避免了类型不兼容的错误。
以上是尽管 `int` 满足 `interface{}`,为什么 Go 不允许将 `func(int)` 传递给 `func(interface{})`?的详细内容。更多信息请关注PHP中文网其他相关文章!