[GoLang] Go的反射使用记录

freddon 发表于2018-12-20   阅读 1307 | 评论 0

Go的反射使用记录
``` re := Re{Name: "fred"} fmt.Println("re 的类型是 :reflect.TypeOf(re) => ", reflect.TypeOf(re)) fmt.Println("nil 的类型是 :reflect.TypeOf(nil) => ", reflect.TypeOf(nil)) fmt.Println("&re 的类型是 :reflect.TypeOf(&re)=>", reflect.TypeOf(&re)) ref := reflect.TypeOf(&re).Elem() fmt.Println("&re 的单元类型是 :reflect.TypeOf(&re).Elem()=>", reflect.TypeOf(&re).Elem()) for i := 0; i < ref.NumField(); i++ { ele := ref.Field(i) fmt.Println("&re 单元中字段有 :ref.Field(i)=>", ele) tag := ref.Field(i).Tag fmt.Println(" tag 为 :ref.Field(i).Tag =>", tag) fmt.Println(" tag取json为 :tag.Get('json') =>", tag.Get("json")) fmt.Println(" tag取abbr为 :tag.Get('abbr') =>", tag.Get("abbr")) } //reflectValue reflectValue := reflect.ValueOf(nil) fmt.Println("reflect.ValueOf(nil)的基本类型为=>", reflectValue.Kind()) reflectValue = reflect.ValueOf(re) fmt.Println("reflect.ValueOf(re)=>", reflectValue) fmt.Println("reflect.ValueOf(re).Interface()=>", reflectValue.Interface()) fmt.Println("reflect.ValueOf(re).Kind()的基本类型为=>", reflectValue.Kind()) fmt.Println("reflect.ValueOf(&re).Kind()的基本类型为=>", (&reflectValue).Kind()) ``` ``` re 的类型是 :reflect.TypeOf(re) => main.Re nil 的类型是 :reflect.TypeOf(nil) => <nil> &re 的类型是 :reflect.TypeOf(&re)=> *main.Re &re 的单元类型是 :reflect.TypeOf(&re).Elem()=> main.Re &re 单元中字段有 :ref.Field(i)=> {Name string json:"name" abbr:"Name" 0 [0] false} tag 为 :ref.Field(i).Tag => json:"name" abbr:"Name" tag取json为 :tag.Get('json') => name tag取abbr为 :tag.Get('abbr') => Name reflect.ValueOf(nil)的基本类型为=> invalid reflect.ValueOf(re)=> {fred} reflect.ValueOf(re).Interface()=> {fred} reflect.ValueOf(re).Kind()的基本类型为=> struct reflect.ValueOf(&re).Kind()的基本类型为=> struct ```

分类 :日常记录

评论(0)


登录,才能发评论哦~