Go语言数据类型的转换细节。
例子描述
Go在不同类型的变量之间赋值时需要显式转换,并且只有显式转换(强制转换)。
表达式T(v)
将值v转换为类型T
T : 就是数据类型
v : 就是需要转换的变量
package main
import "fmt"
func main(){
//进行类型转换:
var n1 int = 100
//var n2 float32 = n1 在这里自动转换不可用
fmt.Println(n1)
var n2 float32 = float32(n1)
fmt.Println(n2)
//注意:n1的类型其实还是int类型,只是将n1的值100转为float32而已,n1还是int的类型
fmt.Printf("%T",n1) //int
//将int64 转为int8的时候,编译是不会出错的,但是会数据的溢出
var n3 int64 = 888888
var n4 int8 = int8(n3)
fmt.Println(n4)//56
var n5 int32 = 12
//var n6 int64 = int32(n5) + 30 //报错编译不通过
var n6 int64 = int64(n5) + 30 //一定要匹配等号左右的数据类型,不然肯定会有错误
fmt.Println(n5)
fmt.Println(n6)
var n7 int64 =12
var n8 int8 = int8(n7) + 127 //编译通过,但是结果会溢出
//var n9 int8 = int8(n7) + 128 //128已经超出存储范围,连编译都不会通过
fmt.Println(n8)
//fmt.Println(n9)
}
总结:
Go语言使用数据类型转换时,要注意匹配等号两边的数据类型,容易出错。
存储空间大字节转小字节,如int64
转int8
,编译并不会报错,但是数据溢出,结果是错的。