首页 > 解决方案 > 接口如何表示 Golang 中的任何类型

问题描述

据说interface{}表示 Go 中的任何类型。例如,让我们考虑一个用于将 Go 数据结构转换为 JSON 字符串的Marshal函数。encoding/json它的定义是

func Marshal(v interface{}) ([]byte, error) 

但是我们将一个结构作为参数传递给它,如下所示。

type hello struct{
   Message string
}
data,err:= json.Marshal(hello{Message:'Hello world'})

Go 是如何处理这个问题的?

标签: go

解决方案


答案是运行时反射。

来自文档

包反射实现运行时反射,允许程序操作任意类型的对象。典型的用法是取一个静态类型 interface{} 的值,通过调用 TypeOf 提取其动态类型信息,返回一个 Type。


推荐阅读