ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 1:基本介绍: Golang和java/c不同,Go在不同类型的变量之间赋值时需要显式转换(也就是强制转换)。也就是说Golang中数据类型不能自动转换。 ## 2:基本语法: 表达式T(v)将值v转换为类型T T:就是数据类型,例如:int32,int64,float64 V:就是需要转换的变量 ## 3:案例演示: 注意:go只有强制转换 **《int32转换----->float32》** ``` package main import ( "fmt" ) func main(){ var sum int32 = 100 // 要转换的数据类型必须把变量传入 var ret float32 = float32(sum) fmt.Printf("sum = %v","ret = %v",sum,ret) } ``` **运行结果:** ``` sum = 100 ret = 100 ``` <br> 《int32转换------>float64》 ``` var sum int32 = 100 var ret1 float64 = float64(sum) fmt.Printf("sum = %v ret1 = %v",sum,ret1) ``` **运行结果:** `sum = 100 ret1 = 100` <br> 《int32转换------->int64》 ``` // var ret2 int64 = int32(sum) 会报错,必须是int64 var ret2 int64 = int64(sum) fmt.Printf("sum = %v ret2 = %v",sum,ret2) ``` **运行结果:** ``` sum = 100 ret2 = 100 ``` <br> <br> ## **4:细节说明:** 一、go中,数据类型的转换可以是从表示范围小->表示范围大,也可以范围大-- >范围小 二、被转换的是变量存储的数据<即值),变量本身的数据类型并没有变化! ``` package main import ( "fmt" ) func main(){ var sum int32 = 100 // 要转换的数据类型必须把变量传入 var ret float32 = float32(sum) fmt.Printf("sum = %v ret = %v",sum,ret) var ret1 float64 = float64(sum) fmt.Printf("sum = %v ret1 = %v",sum,ret1) // var ret2 int64 = int32(sum) 会报错,必须是int64 var ret2 int64 = int64(sum) fmt.Printf("sum = %v ret2 = %v\n",sum,ret2) // 被转换的是变量存储的数据<即值),变量本身的数据类型并没有变化! fmt.Printf("sum type is %T",sum) } ``` **运行结果:** ``` sum type is int32 ``` 三:在转换中,比如将int64 转成int8 \[ 128--127\],**编译时不会报错**,只是转换的结果是**按益出处理**,和我们希望的结果不一样。 ``` var f int64 = 99999 var d int8 = int(f) fmt.Printf(d) ``` **运行结果** ``` -97 ``` <br> <br> ## **5:数据类型转换练习题** 一、判断是否能够编译通过 ![](https://img.kancloud.cn/bc/76/bc76436e9970bc9fa6678273d0140f04_377x165.png) ## **6:课堂练习:** ### **题一**: 编译不通过,报错:43:5: cannot use n1 + 20 (type int32) as type int64 in assignment ``` package main import ( "fmt" ) func main(){ var n1 int32 = 12 var n2 int64 var n3 int8 n2 = n1 + 20 // int32-------交给了------》int64,错误,因为int32加上20,还是int32类型 n3 = n1 + 20 // int32-------交给了------》int8,错误 } ``` <br> **小思考:** 如何将上面的代码修改正确呢?? 如下: ``` package main import ( "fmt" ) func main(){ var n1 int32 = 12 var n2 int64 var n3 int8 n2 = int64(n1) + 20 n3 = int8(n1) + 20 fmt.Println(n2,n3) } ``` **运行结果:** `32 32` <br> <br> ### **题二:** ``` package main import ( "fmt" ) func main(){ var n4 int32 = 12 var n5 int8 var n6 int8 // n6把n4转换成int8 n6 = int8(n4) // 编译可以通过,但是会按照溢出处理 n5 = int8(n4) // 编译不通过,int8最多接受-127,127,所以编译不通过 fmt.Printf(n6,n5) } ```