企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
利用反射编写灵活的代码 === ### 按名字访问结构体成员 `reflect.ValueOf(*e).FieldByName("name")` ### 按照名称访问结构体方法 `reflect.ValueOf(e).MethodByName("UpdateAge").Call([]reflect.Value{reflect.ValueOf(1)})` ### 重点 ~~~ type Employee struct { EmployeeId string Name string Age int } func (e *Employee) UpdateAge(val int) { e.Age = val } func TestInvokeByName(t *testing.T) { e := &Employee{"1", "DollarKiller", 20} // 按照名字获取成员 //t.Logf("Name:value(%[1]v),Type(%[1]T)",reflect.ValueOf(*e).FieldByName("Name")) fmt.Println(reflect.ValueOf(*e).FieldByName("Name")) fmt.Println(reflect.ValueOf(*e).FieldByIndex([]int{2})) if field, err := reflect.TypeOf(*e).FieldByName("Name");err != true { t.Fatal(err) }else{ t.Log(field) } reflect.ValueOf(e).MethodByName("UpdateAge"). Call([]reflect.Value{reflect.ValueOf(1)}) // MethodByName("UpdateAge") 参数名称 // Call([]reflect.Value{reflect.ValueOf(1)}) 1这个是参数 t.Log(e) } ~~~