请首先查看下面的代码。
package main
import "fmt"
type InterfaceFunc func(interface{})
type StringFunc func(string)
func stringFunc(s string) {
fmt.Printf("%v", s)
}
func interfaceFunc(i interface{}) {
fmt.Printf("%v", i)
}
func main() {
var i = interfaceFunc
var s = stringFunc
i = s // I would like someone to explain why this can't be done exactly.
}
运行于https://play.golang.org/p/16cE4O3eb95
为什么InterfaceFunc
不能容纳StringFunc
,而interface{}
却不能容纳string
。
答案 0 :(得分:1)
您不能执行s = i
或i = s
,原因是两个函数的类型不同(签名不同),不能在golang中仅将一种类型分配给另一种类型。
type InterfaceFunc func(interface{}) type StringFunc func(string)
也坐在那里无所事事。