zoukankan      html  css  js  c++  java
  • [golang]语法基础之数据类型转换

    在一些编程语言里面,存在着隐式类型转换,例如JavaScript。

    var a = 10 
    var b = "a"
    console.log(a + b) // 10a
    

    上面的js代码在执行的时候发生了隐式类型转换,将number类型的变量a自动转换为了字符串,和字符串类型的b执行相加后,发生了字符串的拼接。

    但是这种隐式的类型转换,在go语言当中是不存在的。

    go必要的情况下,允许将一个类型的值转换为另外一个类型的值。但是所有的类型转换都必须显示的声明出来。

    示例:

    valTypeB = TypeB(valTypeA)
    

    类型B的值 = 类型B(类型A的值)

    例如下面的例子:

    // 定义一个变量
    var s1 string = "hello,world"
    var a = []byte(s1) // 将字符串转换为数组
    var n1 float64 = 1.0
    var b int = int(n1) // 将float64转换为整型
    

    类型转换只能在定义正确的情况下转换成功,例如从一个取值范围较小的类型转换到一个取值范围较大的类型(将 int16 转换为 int32)。当从一个取值范围较大的类型转换到取值范围较小的类型时(将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。

    只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型),不同底层类型的变量相互转换时会引发编译错误(如将 bool 类型转换为 int 类型):

    // int 32 最大值:2147483647
    var n1 int64 = 2147483648
    var n2 int32 = int32(n1)
    fmt.Println(n2) // -2147483648
    
    // 底层不同的数据进行转换
    var b1 bool = true
    var n1 int = int(b1)
    fmt.Println(n1) // cannot convert b1 (type bool) to type int
    
    
  • 相关阅读:
    Android项目实战(五十五):部分机型点击home再点图标进入程序不保留再之前界面的问题
    Android项目实战(五十四):zxing 生成二维码图片去除白色内边距的解决方案
    关于RecyclerView嵌套导致item复用异常,界面异常的问题
    191114
    191112
    191111
    191110
    191109
    191108
    191107
  • 原文地址:https://www.cnblogs.com/liujunhang/p/12534420.html
Copyright © 2011-2022 走看看