完整代码在这里: 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"
直接
答案 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