首页 > 后端开发 > Golang > 尽管 `int` 满足 `interface{}`,为什么 Go 不允许将 `func(int)` 传递给 `func(interface{})`?

尽管 `int` 满足 `interface{}`,为什么 Go 不允许将 `func(int)` 传递给 `func(interface{})`?

Barbara Streisand
发布: 2024-12-29 18:41:11
原创
633 人浏览过

Why Doesn't Go Allow Passing `func(int)` to `func(interface{})` Despite `int` Satisfying `interface{}`?

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

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