一、介绍
reflect 包次要用来查看 interface{}类型的类型 type 和值 value。
咱们能够用
reflect.TypeOf() 失去 reflect.Type 反射类型
reflect.ValueOf() 失去 reflect.Value 反射值
二、reflect.Type
在这里咱们以 struct 举例:关上源码 src/reflect/type.go
type Type interface {
// 通用的 3 个函数
// 返回 kind,根底类型,Struct,Bool,Int,Int8,Array,Chan,Func,Map...
Kind() Kind
// 返回构造体名称
Name() string
// 返回包门路
PkgPath() string
//struct 相干的 3 个重要办法,能够看到如果不是 struct 的话,会报错
// Field returns a struct type's i'th field.
// It panics if the type's Kind is not Struct.
// It panics if i is not in the range [0, NumField()).
Field(i int) StructField
// FieldByName returns the struct field with the given name
// and a boolean indicating if the field was found.
FieldByName(name string) (StructField, bool)
// NumField returns a struct type's field count.
// It panics if the type's Kind is not Struct.
NumField() int}
本文次要截取了 reflect.Type 的 6 个办法以及 StructField 构造体
- 通用的办法 Kind(),Name(),PkgPath()
- struct 相干办法 NumField(),FieldByName(),Field()
- StructField 构造体,用来形容 struct
咱们先看一个构造体
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}