基本数据类型转换
- 基本介绍
- Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换。
- 基本语法
- 表达式 T(v) 将值 v 转换为类型 T
- T: 就是数据类型,比如 int32,int64,float32 等等
- v:就是需要转换的变量
- 案例演示1:
var n1 int32 = 100
//希望将 n1转换成 float
var n2 float32 = n1
![](https://i-blog.csdnimg.cn/blog_migrate/b7b7c512075553d36d29a110db67f105.png)
var n1 int32 = 100
var n2 float32 = float32(n1)
var n3 int8 = int8(n1)
fmt.Printf("n1 = %v ,n2 = %v ,n3 = %v", n1, n2, n3)
![](https://i-blog.csdnimg.cn/blog_migrate/f1fd97e39443ba858526658a78de6fc1.png)
基本数据类型转换细节讨论
- Go 中,数据类型的转换可以是从 表示范围小 -> 表示范围大,也可以 范围大 -> 范围小
- 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!
![](https://i-blog.csdnimg.cn/blog_migrate/0bc3d09d2669f952a01a59663223dbc7.png)
- 把n1的值,也就是100转换成float32,但是n1仍然是int32类型。
var n1 int32 = 100
var n2 float32 = float32(n1)
fmt.Printf("n1 type is %T\n", n1)
fmt.Printf("n2 type is %T", n2)
![](https://i-blog.csdnimg.cn/blog_migrate/582cadf09a920b038f9119cf2898bc9f.png)
- 在转换中,比如将 int64 转成 int8 【-128---127】 ,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围.
//转换的结果是按溢出处理
var n1 int64 = 999999
var n2 int8 = int8(n1)
fmt.Println("n2 = ", n2)
![](https://i-blog.csdnimg.cn/blog_migrate/af9a37eaf805a26cd92fd261853d312f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0506e7611b86a4801b739d69a6060a68.png)
![](https://i-blog.csdnimg.cn/blog_migrate/de83124947866098614e6f77ede301cc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/20d5cf2e2cea577ea6aa25d5059cef11.png)
- n3 = int(n1) + 128,128本身超出 int8 范围,所以无法编译通过。