我不明白是什么问题。
这是示例代码:

type InterfaceFunction func(i interface{})
func main() {
    var notOk InterfaceFunction = func(s string){}
    var ok InterfaceFunction = func(i interface{}){}
}

最佳答案

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

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带有InterfaceFunction,根据定义,该interface{}可以将任何myFunc用作其参数。 func(string)可以传递它想要的任何内容。如果允许我们在此处使用func(interface{})作为myFunc,则int将不再具有编译时类型安全性:它将将string传递给采用ojit_code的函数。

10-01 11:53