在golang中,始终将JSON消息中的数字解析为float64。为了检测它是否实际上是整数,我正在reflect.TypeOf()检查其类型。不幸的是,没有常数代表reflect.Type。
reflect.TypeOf()
reflect.Type
intType := reflect.TypeOf(0) floatType := reflect.TypeOf(0.0) myType := reflect.TypeOf(myVar) if myType == intType { // do something }
有没有更优雅的解决方案,而不是使用0或0.0来获取reflect.Type?
您也可以在类型的文档上使用Value.Kind()或Type.Kind()方法,其可能的值在reflect程序包中作为常量列出Kind。
Value.Kind()
Type.Kind()
reflect
Kind
myType := reflect.TypeOf(myVar) if k := myType.Kind(); k == reflect.Int { fmt.Println("It's of type int") } else if k == reflect.Float64 { fmt.Println("It's of type float64") }
您也可以在中使用它switch:
switch
switch myType.Kind() { case reflect.Int: fmt.Println("int") case reflect.Float64: fmt.Println("float64") default: fmt.Println("Some other type") }
请注意,reflect.Type和reflect.Value都有一个Kind()方法,因此,如果您以reflect.ValueOf(myVar)和开头,都可以使用它reflect.TypeOf(myVar)。
reflect.Value
Kind()
reflect.ValueOf(myVar)
reflect.TypeOf(myVar)