我无法理解是什么问题。
这是示例代码:
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
的函数.
关于go - 带有接口(interface)参数的函数不等于带有字符串参数的函数。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60283628/