Go 语言的强制类型转换
Go 语言是一种强类型语言,而且没有隐式转换。也就是说运算符左右的变量类型必须一致,若不一致就会报错。为了使用户更加的容易使用,所以 Go 语言提供了各个类型之间强制类型转换的内置方法。
1. 整型和浮点型互相转换
整型和浮点型变量之间的相互转换相对容易,只需使用强制类型转换标志 type(variable)
就好了。需要注意的是,当高精度向低精度类型转换的时候,会失真。即浮点型向整型转换的时候会失去其小数部分。在实际开发的过程中,我们一般要避免这两个类型的互相转换,在无法避免的场景,比如说计算浮点数和整数的和之类的情况中。需要秉持不失真原则,将低精度向高精度转换之后进行计算。
代码示例:
package main
import "fmt"
func main(){
var a int = 10 // 声明一个整形变量 a 并给 a 赋值为 10
var b float32 = 3.14 // 声明一个浮点型变量 b 并给 b 赋值为 3.14
fmt.Printf("整型转换为浮点型:%f\n",float32(a)) // 将变量 a 强制转换为浮点型变量并打印结果
fmt.Printf("浮点型转换为整型:%d\n",int(b)) //浮点型转为整型会失真
}
执行结果如下:
整型和浮点型互相转换实例输出结果
2. 整形和字符串互相转换
整型和字符串类型的变量互相转换,需要依靠 Go 语言提供的转换包strconv
。字符串转整型需要使用这个包的Atoi(string)
方法,整型转字符串则是Itoa(int)
。这种转换用得最多的就是给一些对象进行编号。比如需要给张三编号为NO.1,你可能需要将1转换为字符串之后与NO.进行拼接。
代码示例:
package main
import (
"fmt"
"strconv" // 在程序中导入 strconv 转环包
)
func main() {
var a int = 10 // 定义一个整形变量并赋值为 10
var b string = "10" // 定义一个字符串类型变量并赋值为 "10"
fmt.Printf("整型转换为字符串:%s\n", strconv.Itoa(a))
tmp, \_ := strconv.Atoi(b)
fmt.Printf("字符串转换为整型:%d\n", tmp)
}
执行结果如下:
整形和字符串互相转换实例输出结果
3. 浮点型和字符串互相转换
浮点型和字符串的互相转换没有直接封装好的转换接口了,需要调用strconvs
包中稍微底层一点的接口。浮点型转字符串使用FormatFloat(float64,byte,int,int)
方法,字符串转换为浮点型则使用ParseFloat(...)
方法。因为浮点数在存储过程中容易因为精度问题而存在误差,所以有时候会将浮点数转换为字符串进行存储。
代码示例:
package main
import (
"fmt"
"strconv"
)
func main() {
f1 := 0.123456789
s1 := strconv.FormatFloat(f1, 'f', -1, 32)
s2 := strconv.FormatFloat(f1, 'f', -1, 64)
s3 := "0.123456789"
f2, \_ := strconv.ParseFloat(s3, 64)
f3, \_ := strconv.ParseFloat(s3, 32)
fmt.Println("将浮点数转换为float32转换为string:", s2)
fmt.Println("将float64转换为string:", s1)
fmt.Println("将string转换为float64:", f2)
fmt.Println("将string转换为float32再强制转换为float64:", f3)
}
执行结果:
浮点型和字符串互相转换实例输出结果
4. 小结
本文主要学习了 Go 语言中各个数据类型的互相强制转换。主要都是依赖与 strconvs
这个第三方包。这个包中还提供了其它很多的转换方法,大家有机会可以更深入地去了解一下。在做类型转换的时候要注意:浮点型在转为整型时会失真。