乐趣区

关于go:go-reflect-struct-go反射与struct结构体

一、介绍

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 构造体

  1. 通用的办法 Kind(),Name(),PkgPath()
  2. struct 相干办法 NumField(),FieldByName(),Field()
  3. StructField 构造体,用来形容 struct

咱们先看一个构造体

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

二、reflect.Value

退出移动版