当前位置:   article > 正文

go的反射操作reflect实践

go的反射操作reflect实践

 通过反射机制,找到相应的Left或者Right广告

  1. type SearchAdsObj struct {
  2. Left PositionAdsObj `json:"left"`
  3. Right PositionAdsObj `json:"right"`
  4. }
  5. func getFieldByName(obj SearchAdsObj, fieldName string) (interface{}, error) {
  6. fmt.Printf("getFieldByName: %s \n", fieldName)
  7. val := reflect.ValueOf(obj)
  8. // fmt.Printf("getFieldByName val %v \n", val)
  9. if val.Kind() != reflect.Struct {
  10. fmt.Printf("getFieldByName input is not a struct")
  11. return nil, fmt.Errorf("getFieldByName input is not a struct")
  12. }
  13. field := val.FieldByName(fieldName)
  14. if !field.IsValid() {
  15. fmt.Printf("getFieldByName field %s not found in the struct", fieldName)
  16. return nil, fmt.Errorf("getFieldByName field %s not found in the struct", fieldName)
  17. }
  18. var inter interface{} = field
  19. if myStruct, ok := inter.(PositionAdsObj); ok {
  20. // 如果转换成功,myStruct现在包含MyStruct类型的值
  21. return myStruct, nil
  22. } else {
  23. // 如果转换失败,说明myInterface不包含MyStruct类型的值
  24. fmt.Println("Conversion failed, myInterface does not contain a PositionAdsObj")
  25. return nil, fmt.Errorf("Conversion failed, myInterface does not contain a PositionAdsObj")
  26. }
  27. }

注意 getFieldByName 传入的是SearchAdsObj具体类型的实体,而不能是:obj interface{}

func getFieldByName(obj interface{}, fieldName string) (interface{}, error) {

因为反射访问结构体内部字段时候,需要操作的对象是一个实际类型的结构体

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/514427
推荐阅读
相关标签
  

闽ICP备14008679号