美文网首页
如何检测数据类型

如何检测数据类型

作者: 酷走天涯 | 来源:发表于2018-12-27 09:50 被阅读16次

    本节我们的要掌握的知识点如下

    1.怎么判断一个变量的类型

    package main
    
    import "fmt"
    
    func main(){
      var container = []int{1,2,3}
      value,ok := interface{}(container).([]int)
      fmt.Println(value)
      fmt.Println(ok)
    }
    
    image.png

    value,ok := interface{}(container).([]int)这句代码的含义解释一下

    interface{}(container)是把container转换为空接口
    .([]int)判断前者的类型是否为切片类型 []int,判断结果赋值给ok,如果是true就将转换后的结果赋值给value,否则将nil赋值给value

    下面有一个问题

    value:= interface{}(container).([]int) 这句话执行的结果会怎么呢?
    如果container 为 []int 类型,那么value就是类型转换后的值
    如果container 不是 []int 类型呢? 那么程序就会抛出一个panic 如下截图

    image.png

    所以一般情况下 我们尽量使用第一种方式进行转换

    x.(T) 这个就是类型转换公式,注意几点

    1.x必须是接口类型,具体哪个接口类型无所谓,你可能疑惑什么是接口类型,请查阅接口类型
    2.interface{} 代表空接口类型, {} 可以表示空的数据块,也可以表示不包含任何内容的数据结构,
    比如 struct{} 表示不包含任何方法和字段的的空结构体;[]string{}表示空切片 map[int]string{} 空字典

    3.T就做类型字面量,即数据类型,通俗的讲就是用字符表示弄一种数据类型结构


    类型转换

    T(x)

    package main
    import "fmt"
    func main(){
      value:= int('9')
      fmt.Println(value)
    }
    

    猜猜输入是什么?
    答案不是9, 57 字符9 转换成数字就是57,比如字符a转换成数字就是98

    那么怎么转换成数字了

    package main
    
    import (
        "fmt"
        "strconv"
    )
    
    func main(){
      value,ok:= strconv.Atoi("9")
      fmt.Println(value)
      fmt.Println(ok)
    }
    

    在看一个例子

    package main
    
    import (
        "fmt"
        )
    
    func main(){
      var a = 128
      value := int8(a)
      fmt.Println(value)
    
    }
    

    答案是 - 128

    解释一下 127 二进制是 01111 1111 ,那么128 就是 1000 0000,第一位是符号位,即负值,那么值为补码 + 1 即 127 + 1 = 128 则值为 - 128


    获取值类型的名称

    package main
    
    import (
        "fmt"
        "reflect"
    )
    
    func main(){
      var a =   128
      typeName := reflect.TypeOf(a)
      fmt.Println(typeName)
    }
    
    
    image.png

    相关文章

      网友评论

          本文标题:如何检测数据类型

          本文链接:https://www.haomeiwen.com/subject/ggvpqqtx.html