如何直接使用golang反射f.Type()==“ string”?

时间:2018-08-05 14:51:59

标签: go

完整代码在这里: https://pastebin.com/xC1uQVBC

   type UDD struct {
                        A string //content = "John"
                        B string //content = "Male"
                        C string //content = "12345678"
                        D int64 //content = ""
                        E uint64 //content = ""
                        Z string //content = "FIrst time user"
   }


    reflect_UDD := reflect.ValueOf(&UDD).Elem()
    typeOf_UDD := reflect_UDD.Type()




    for i := 0; i < reflect_UDD.NumField(); i++ {
           f := reflect_UDD.Field(i)

           if(f.Type()==reflect.TypeOf("string")){ 
                //i would like to f.Type()=="string" directly... 
                //how is this possible and also for uint64 and int64 etc
           }
     }

基本上,我想做些类似的事情

f.Type()=="string"

f.Type()=="uint64"

f.Type()=="int64"

直接

3 个答案:

答案 0 :(得分:1)

声明感兴趣类型的变量。通常最好在程序包级别执行此操作。

var ( 
  stringType = reflect.TypeOf("")
  uint64Type = reflect.TypeOf(uint64(0))
  ... and so on
)

与以下类型进行比较:

if f.Type() == stringType { 
    ...
}

无法使用f.Type()== "string",因为无法分配字符串来反映类型值,反之亦然。

另一种选择是调用Type.String(),但是比较类型通常比字符串更好:

if f.Type().String == "string" { 
    ...
}

答案 1 :(得分:1)

f.Type()更改为f.Kind(),然后使用反射类型进行判断,可以找到受支持的类型https://godoc.org/reflect#Kind。 请查看完整的示例https://play.golang.org/p/Zydi7t3UBNJ

      switch f.Kind() {
    case reflect.Int64:
        fmt.Println("got int64")
    case reflect.String:
        fmt.Println("got string")
    case reflect.Uint64:
        fmt.Println("got Unit64")
    default:
        fmt.Println("found nothing")        
   }

答案 2 :(得分:0)

f.Type().Kind().String()=="Uint64"

请参见reflect.Kind