你绊倒了围棋新人一个非常普遍的误解:空接口
interface{}并 不能 意味着“任何类型”。确实不是。Go是静态类型的。空接口interface{}是实际的(强类型),例如string或
struct{Foo int}或interface{Explode() bool}。这意味着如果某物具有该类型,
interface{}则它具有该类型而不是“任何类型”。您的职能
func test(x func() interface{})接受一个参数。此参数是一个(无参数函数),它返回特定类型type
interface{}。您可以将test与此签名匹配的任何函数传递给它:“无参数并返回
interface{}”。没有您的功能a并且
b匹配此签名。
如上所述:
interface {}“ whatever”不是“ whatever”的神奇缩写,它是一种独特的静态类型。您必须将例如a更改为:
func a() interface{} { return "hello"}现在,当您返回
string不是type的a时,这可能看起来很奇怪
interface{}。之所以可行,是因为任何类型都可以分配给该类型的变量interface{}(因为每种类型至少都没有方法:-)。


