猿问

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

我无法理解是什么问题。这是示例代码:


type InterfaceFunction func(i interface{})

func main() {

    var notOk InterfaceFunction = func(s string){}

    var ok InterfaceFunction = func(i interface{}){}

}


汪汪一只猫
浏览 102回答 1
1回答

智慧大石

因为种类不一样。想象一下: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。
随时随地看视频慕课网APP

相关分类

Go
我要回答