当前位置: 首页 > 面试题库 >

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

曾嘉荣
2023-03-14
问题内容

在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


问题答案:

您也可以在类型的文档上使用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)



 类似资料:
  • 授权服务器可以支持任何与其安全要求匹配的合适的HTTP身份验证方案。当使用其他身份验证方法时,授权服务器必须定义客户端标识(注册记录)和认证方案之间的映射。

  • 问题内容: 我是Web编程的新手,正在做可以在网上找到的各种教程。 我做了研究,发现在int(11)中,11是整数的最大显示宽度,如果整数是UNSIGNED(在本例中为10),则它是默认值。 当我看到这样的东西: 我没问题 但是,为什么在不同的教程中看到不同的东西?例如,在某些情况下, 乃至 这些tut的作者试图达到什么目的?他们似乎都不想去解释10或4的含义。 好了,它们显然正在减小显示宽度,但

  • 12.2. reflect.Type和reflect.Value 反射是由 reflect 包提供的。 它定义了两个重要的类型, Type 和 Value. 一个 Type 表示一个Go类型. 它是一个接口, 有许多方法来区分类型以及检查它们的组成部分, 例如一个结构体的成员或一个函数的参数等. 唯一能反映 reflect.Type 实现的是接口的类型描述信息(§7.5), 也正是这个实体标识了接

  • 其他认证方法 还有两种其他身份验证方法值得一提。它们是一次性密码和证书。 一次性密码 FreeRADIUS包含一个名为rlm_otp的模块,可用于处理OTP(一次性密码)令牌。该模块应与其他程序一起使用。 不幸的是,为其他程序提供代码的公司Tri-D Systems已经不存在了。但是,代码是分叉的,现在可以从Google Code(http://code.google.com/p/otpd/)获得

  • 问题内容: 我正在通过其getter 获取对象中命名的值,如下所示。 比方说,目标是再 现在,我需要开发一个验证器,该验证器将验证应为整数类型,如果不是,则将引发异常,我也开发了如下所示的程序 现在的问题是,来自是一个整数,例如,但也可以是一个浮点数,例如。因此,在float的情况下会引发一个。 我如何才能使它们对于整数或浮点数都完美? 问题答案: 你可以这样使用: [-+]? -为标志。 [0-

  • 我知道浏览器和java7之所以不受影响,是因为它们将服务器名称指示SNI作为SSL信息的一部分发送。因此,apache在启动SSL握手之前知道要使用哪个虚拟主机,并返回正确的证书。Java6不支持SNI。所以我的问题是,如何在Java6中验证并允许证书被接受。 我制作了一个spring客户端来使用webservice,下面是我的代码 正如您看到的代码,我创建了两个方法,1。对于请求2。对于响应。(