1. 定义一个结构体
  2. 给结构体赋值
  3. 用反射获取结构体的下标、结构体名称、类型、值
  4. 改变结构体的值
type T struct { #定义结构体
    A int
    B string
}

func main() {
    t := T{23, "Murphy"} #给结构体赋值
    s := reflect.ValueOf(&t).Elem() #获取指向t的指针的具体值的封装
    typeOfT := s.Type() #结构体的类型
    for i := 0; i < s.NumField(); i++ { #结构体字段数
        f := s.Field(i) #获取结构体的第i个字段
        fmt.Printf("%d: %s %s = %v\n", i,
            typeOfT.Field(i).Name, f.Type(), f.Interface()) #依次输出 结构体下标、字段名,字段类型,值
    }
    s.Field(0).SetInt(77)
    s.Field(1).SetString("Sunset Strp")
    fmt.Println("t is now", t)
}
0: A int = 23
1: B string = Murphy
t is now {77 Sunset Strp}