博主最近在学习go语言,这里记录一下一个关于结构体反射的小trick
关于将结构体的指针类型作为reflect.ValueOf
的参数
因为myst的Field有这Name``age``hobby
三个,所以在获取NumField和Field时需要将TypeOf(*myst).Elem()
作为参数
而两个方法是将指针类型作为接收者,所以ValueOf(*myst).Method(i).Call(nil)
可以调用方法。
package main
import (
"fmt"
"reflect"
)
func (m *myst) Kaihe() {
fmt.Println(m.Name, m.age, m.hobby)
}
func (m *myst) Shangxue() {
fmt.Println(m.Name, "今天上学")
}
type myst struct {
Name string `json:"name" ini:"s_name"`
age int
hobby []string
}
func main() {
stu := &myst{Name: "Epicmo", age: 50, hobby: []string{"play", "jump"}}
stu.Shangxue()
t := reflect.TypeOf(stu).Elem()
for i := 0; i < t.NumField(); i++ {
fileobj := t.Field(i)
fmt.Printf("name %v, type %v tag %v \n", fileobj.Name, fileobj.Type, fileobj.Tag)
fmt.Println(fileobj.Tag.Get("json"))
}
v := reflect.ValueOf(stu)
for i := 0; i < v.NumMethod(); i++ {
v.Method(i).Call(nil)
}
}
Epicmo 今天上学
name Name, type string tag json:"name" ini:"s_name"
name
name age, type int tag
name hobby, type []string tag
Epicmo 50 [play jump]
Epicmo 今天上学
0 评论:
发表评论