概念
Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时都需要显式转换
也就是说 Golang 中数据类型不能自动转换
表达式 T(v) 将值 v 转换为类型 T
T: 就是数据类型,比如 int32,int64,float32 等等
v: 就是需要转换的变量
注意事项
1) Go 中,数据类型的转换可以是从 范围小 --> 范围大,也可以 范围大 --> 范围小
但是不管高精度转低精度,还是低精度转高精度,都必须一定要 手动的显式转换
2) 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化
3) 在转换中,比如将 int64 转成 int8 【-128---127】 ,编译时不会报错,只是转换的结果是按 溢出处理,
和我们希望的结果不一样。 因此在转换时,需要考虑范围
ps: 大 转 小 能不写 就别写,这个就是隐藏的炸弹,根本不会有任何提示。
放在复杂的业务逻辑中,很难排查判断出是这里的问题
练习一:判断是否能够编译通过
练习二:判断是否能够编译通过
一句话总结:
字面值如果
能看出来 (128直接超出 int8 范围)
能算出来(127+127 = 254 也超出)
编译时就会报错
如果不是,编译不报错,运行不报错,
只不过结果可能会溢出,那样结果不准确
n2 = int8(n1) + 127 这里只有 127 是字面值,即使你觉的 n1 是一个已经明确赋值的变量
和 string 的相互转换
注意事项
其他 转 string 一般问题不大
string 转 其他 尤其要注意,要确保 String 类型能够转成有效的数据
比如 我们可以 把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数,
如果这样做,Golang 不会报错直接将其转成 0 , 其它类型也是一样的道理. float => 0 bool => false