我不明白是什么问题。
这是示例代码:
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的函数。