8.30Go之数据类型转换
Go语言当中的类型转换
特点:
Go语言不存在隐式类型转换,所有的类型转换都必须显式的声明:
valueOfTypeB = typeB(valueOfTypeA)
/*
类型 B 的值 = 类型 B(类型 A 的值)
*/
Go语言当中数据类型转换的一些特性
-
只能在定义正确的情况下转换成功。例如:从一个取值范围较小的类型转换到一个取值范围较大的类型
-
从一个取值范围较大的类型转换到取值范围较小的类型时(将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。--->不会失败,会丢失精度
-
-
有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型),不同底层类型的变量相互转换时会引发编译错误(如将 bool 类型转换为 int 类型)
底层类型相同指的是值类型,值类型可以向引用类型转型。例如:将一串int转成string类型
示例:
package main
import (
"fmt"
"math"
)
func main() {
/*打印数据类型的最大最小值*/
fmt.Println("int8 range is:", math.MinInt8, math.MaxInt8)
/*声明一个int32整数型*/
var num int32 = 1047483647
//格式化输出变量的16进制形式和10进制形式
fmt.Printf("int32: 0x%x %d\n", num, num)
/*数值转型为int16*/
num2 := int16(num)
fmt.Printf("int16: 0x%x %d\n", num2, num2)
/*
上下两次打印的结果上看发生了精度丢失
*/
/*声明一个float变量*/
var num3 float32 = math.Pi //圆周率
fmt.Println(int(num3)) //精度丢失,小数点后的数全部丢失
/*
浮点数在转换为整型时,会将小数部分去掉,只保留整数部分。
*/
}
fmt.Printf
的%x
动词将数值以十六进制格式输出,输出 num 在转换前的 32 位的值。