类型转换的语法:T(x)。
其中T叫做目标类型,x叫做源值,可以是一个变量,也可以是一个代表值的常量,还可以是一个单值的表达式。x的类型叫做源类型。
Go语言规范中规定了哪些从源类型到目标类型的转换是合法的,编译器会帮我们检查出这些不合法的错误转换,这些我们不需要关心。我们需要关心的是那些Go语言编译器很难检测出来的问题。
- 对于整数类型值,整数长廊之间的类型转换,原则上只要源值在目标类型的可表示范围内就是合法的。
举个栗子:把无类型的常量255转换成uint8类型的值。
uint8(255)
- 需要特别注意的是,源整数类型的可表示范围较大,而目标类型的可表示范围较小的情况。
举个栗子:
var srcInt = int16(-255)
dsInt := int8(srcInt)
dsInt 的值现在变成了 1
当把一个浮点数类型的值转换为整数类型时,前者的小数部分会被全部截掉。
直接把一个整数值转换为一个string类型的值是可行的,但是需要注意:被转换的整数值应该可以代表一个有效的Unicode代码点,否则转换的结果将会是"�"(仅由高亮的问号组成的字符串值)。
例如:
string(-1)
- string类型和各种切片类型之间互转时需要注意:一个string类型向[]byte类型转换时,代表着以UTF-8编码的字符串会被拆分成零散的独立的字节。
举例子
fmt.Println(len("我"))
结果是3。Unicode字符集中除了ASCII之外的部分,编码时3个字节才能表示一个字符。
- 一个值从string类型向[]rune类型转换时,代表着字符串会被拆分成一个个Unicode字符。