go - 带有接口(interface)参数的函数不等于带有字符串参数的函数。为什么?

标签 go

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

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/

相关文章:

mongodb - mongoimport 在 mac Sierra 10.12.2 上抛出随机 MSpanList_Insert 错误

go - 在 Go 中使用 channel ,我创建了一个返回地址的阶乘函数

go - 转换负数

rest - Golang gorilla mux REST api 在使用 PUT 和 DELETE 方法时出现 405 错误

go - Golang 中的模糊字符串匹配

string - 具有多个 "\n"的字符串变量的漂亮格式

go - 参数作为参数数量可变的函数

arrays - 理解 Go 的 slice 符号

loops - 从 Golang 中的 slice 中删除

找到并替换了 Go 模块,但不是必需的