1.通过反射调用方法
// 定义结构体
type User struct {
Id int
Name string
Age int
}
func (u *User) SayHello(name string) {
fmt.Println("Hello:", name)
}
func main() {
u := new(User)
v := reflect.ValueOf(u)
// 获取方法
m := v.MethodByName("SayHello")
// 构建一些参数
args := []reflect.Value{reflect.ValueOf("xiaowang")}
// 没参数的情况下:var args2 []reflect.Value
// 调用方法,需要传入方法的参数
m.Call(args)
}
2.通过反射获取结构体Tag
// 定义结构体
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
u := new(User)
t := reflect.TypeOf(u)
f := t.Elem().Field(0)
json := f.Tag.Get("json")
fmt.Println(json)
}
3.修改结构体的某个值
// 定义结构体
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
u := new(User)
v := reflect.ValueOf(u)
fieldByName := v.Elem().FieldByName("Name")
fieldByName.SetString("laowang")
fmt.Println(u)
}