因为种类不一样。想象一下: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这里接受 an InterfaceFunction,根据定义,接受 anyinterface{}作为它的参数。myFunc可以通过它想要的任何东西。如果我们被允许在这里使用 afunc(string)作为 a func(interface{}),myFunc将不再具有编译时类型安全性:它会将 a 传递int给一个接受 a 的函数string。