据说interface{}
代表Go中的任何类型。例如,让我们考虑Marshal
中的encoding/json
函数,该函数用于将Go数据结构转换为JSON字符串。它的定义是
func Marshal(v interface{}) ([]byte, error)
但是我们将一个结构作为参数传递给它,如下所示。
type hello struct{
Message string
}
data,err:= json.Marshal(hello{Message:'Hello world'})
Go如何处理呢?
答案 0 :(得分:2)
答案是运行时反射。
来自docs:
程序包反射实现了运行时反射,从而允许程序处理任意类型的对象。典型的用法是使用静态类型interface {}获取值,并通过调用TypeOf来提取其动态类型信息,该类型将返回Type。