为了账号安全,请及时绑定邮箱和手机立即绑定

带有接口参数的函数不等于带有字符串参数的函数。为什么?

带有接口参数的函数不等于带有字符串参数的函数。为什么?

Go
汪汪一只猫 2022-05-18 13:46:17
我无法理解是什么问题。这是示例代码:type InterfaceFunction func(i interface{})func main() {    var notOk InterfaceFunction = func(s string){}    var ok InterfaceFunction = func(i interface{}){}}
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

因为种类不一样。想象一下:


type InterfaceFunction func(i interface{})


func main() {

    var notOk InterfaceFunction = func(s string){}

    myFunc(InterfaceFunction(notOk))    // This can't possibly work!

}


func myFunc(fn InterfaceFunction) {

    x := 17

    fn(x)   // This is legal, because InterfaceFunction takes an interface{}

}

我们的myFunc这里接受 an InterfaceFunction,根据定义,接受 anyinterface{}作为它的参数。myFunc可以通过它想要的任何东西。如果我们被允许在这里使用 afunc(string)作为 a func(interface{}),myFunc将不再具有编译时类型安全性:它会将 a 传递int给一个接受 a 的函数string。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信