reflect基本用法

reflect基本用法

按名字访问结构的成员 #

reflect.ValueOf(*e).FieldByName("Name")

按名字访问结构的方法 #

reflect.ValueOf(e).MethodByName("UpdateAge").Call(
  []reflect.Value{reflect.ValueOf(1)}
)

Struct Tag #

type Employee struct {
    EmployeeID string
    Name string `format:"normal"`
    Age int
}
func TestInvokeByName(t *testing.T) {
    e := &Employee{"1", "Mike", 30}
    //按名字获取成员
    t.Logf("Name: value(%[1]v), Type(%[1]T) ", reflect.ValueOf(*e).FieldByName("Name"))
    if nameField, ok := reflect.TypeOf(*e).FieldByName("Name"); !ok {
            t.Error("Failed to get 'Name' field.")
    } else {
            t.Log("Tag:format", nameField.Tag.Get("format"))
    }
    reflect.ValueOf(e).MethodByName("UpdateAge").
            Call([]reflect.Value{reflect.ValueOf(1)})
    t.Log("Updated Age:", e)
}