一尘不染

验证reflect.Type的其他方法int和float64

go

在golang中,始终将JSON消息中的数字解析为float64。为了检测它是否实际上是整数,我正在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


阅读 192

收藏
2020-07-02

共1个答案

一尘不染

您也可以在类型的文档上使用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 myType.Kind() {
case reflect.Int:
    fmt.Println("int")
case reflect.Float64:
    fmt.Println("float64")
default:
    fmt.Println("Some other type")
}

请注意,reflect.Typereflect.Value都有一个Kind()方法,因此,如果您以reflect.ValueOf(myVar)和开头,都可以使用它reflect.TypeOf(myVar)

2020-07-02