类型转换的语法: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字符。
12-05 00:30