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)
}