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]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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.常量定义未被使用,不会再编译时出错

常量用于枚举(常量组)

例如如下格式:

1
2
3
4
5
const (
Unkonwn = 0
Female = 1
Male = 2
)

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

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

1
2
3
4
5
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可以被用作枚举值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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
}
坚持原创技术分享,您的支持将鼓励我继续创作!
-------------本文结束感谢您的阅读-------------
分享到:
0%