接口如何表示Golang中的任何类型

时间:2018-08-04 08:16:57

标签: go

据说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如何处理呢?

1 个答案:

答案 0 :(得分:2)

答案是运行时反射。

来自docs

  

程序包反射实现了运行时反射,从而允许程序处理任意类型的对象。典型的用法是使用静态类型interface {}获取值,并通过调用TypeOf来提取其动态类型信息,该类型将返回Type。