Go语言学习(6) - 数据类型转换和常量以及iota

数据类型转换的格式

1.T(表达式)

  • 采用数据类型前置加括号的方式进行类型转换。T表示要转换的类型;表达式包括变量、数值、函数返回值等
  • 类型转换时,需要考虑采用两种类型之间的关系和范围,是否会发生数值截断
  • 布尔型无法与其他类型转换

2.float与int之间的转换

  • float转int会导致精度损失

3.int转string

  • 相当于是 byte 或 rune 转string
  • 该int 值是ASCII吗的编号或者Unicode字符集的编号,转成 string 就是讲根据字符集,将对应编号的字符查找出来
  • 当该值超过Unicode编号的返回,则转成的字符串显示为乱码
  • 例如,当19968转string,就是“一”

【备注】

ASCII字符集中数字的10进制范围是 [30 - 39]

ASCII字符集中大写字母的10进制范围是 [65 - 90]

ASCII字符集中小写字母的10进制范围是 [97 - 122]

Unicode字符集中汉字的范围是 [4e00 - 9fa5],10进制的范围是[19968 - 40869]

package main
import "fmt"

func main() {
    /* 语文成绩是 90,英语成绩是 80.5,计算平均值 */
    chinese := 90
    english := 80.5
    // float转int
    avg := (chinese + int(english)) / 2
    fmt.Println("平均值:" , avg)
    // 平均值: 85

    // int转float
    avg2 := (float64(chinese) + english) / 2
    fmt.Println("平均值2:" , avg2)
    // 平均值2: 85.25

    // 布尔型不能转换为其他
    // flag := true
    // int(flag)

    // 字符串不能转为int
    // str := "Joe"
    // int(str)

    result := string(chinese)
    fmt.Println("语文成绩转string,结果为:", result)
    // 语文成绩转string,结果为: Z

    x := 'Z'
    fmt.Println("字符Z转string,结果为:" , string(x))
    // 字符Z转string,结果为: Z

    X := '一'
    fmt.Println("字符 一 转string,结果为:" , string(X))
    // 字符 一 转string,结果为: 一

    XX := 19968
    fmt.Println("数值19968 转string,结果为:" , string(XX))
    // 数值19968 转string,结果为: 一
}

常量声明方式

1.相对于变量,常量是恒定不变的值,例如圆周率

  • 常量是一个简单值的标识符,在程序运行时,不会被修改

2.常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型

3.常量的定义格式:

  • const 标识符 [类型] = 值
  • 可以省略类型说明符 [type],因为编译器可以根据变量的值来自动推断其类型
    • 显示类型定义: const B string = "Joe"
    • 隐式类型定义: const C = "Joe"

4.多个相同类型的声明可以简写为:

  • const WIDTH , HEIGHT = value1, value2

5.常量定义未被使用,不会再编译时出错

常量用于枚举(常量组)

例如如下格式:

const (
    Unkonwn = 0
    Female = 1
    Male = 2
)

数字0、1、2分别表示未知性别、女性、男性

常量组中如果不指定类型和初始值,则与上一行非空常量的值相同

const (
    a = 10
    b
    c
)

打印 a b c ,输出 :10 10 10

iota

1.iota ,特殊常量值,是一个系统定义的可以被编译器修改的常量值。iota只能出现在常量中。

2.在每一个const 关键字出现时,被重置为0,然后每出现一个常量,iota所代表的数值会自动增加1。iota可以理解成常量组中的常量的计数器,不论该常量的值是什么,只要有一个常量,那么iota就加1

3.iota可以被用作枚举值

package main
import "fmt"

func main() {
    const (
        L = iota
        M = iota
        N = iota
    )
    fmt.Println(L, M, N)
    // 输出:0 1 2

    const (
        L1 = iota
        M1
        N1
    )
    fmt.Println(L1, M1, N1)
    // 输出:0 1 2

    const (
        L2 = "Joe"
        M2 = iota
        N2
    )
    fmt.Println(L2, M2, N2)
    // 输出:Joe 1 2

    const (
        i = 1 << iota  // 1 * 2^iota
        j = 3 << iota  // 3 * 2^iota
        k
        l
    )
    fmt.Println(i, j, k ,l)
    // 输出:1 6 12 24

    const (
        a1 = '一'
        b1
        c1 = iota
        d1
    )
    fmt.Println(a1, b1, c1 ,d1)
    // 输出:19968 19968 2 3

    const name  = iota
    fmt.Println("name=", name)
    // 输出:name= 0
}

欢迎关注我的公众号,第一时间接收文章推送~ 搜索公众号: 码咖 或者 扫描下方二维码:


qrcode_wx.jpg

你可能感兴趣的:(Go语言学习(6) - 数据类型转换和常量以及iota)