在 Go 语言 中,一个 类型 的值可以被转换成另一种类型的值,这个转换就叫做类型转换。在 Go 语言类型转换中不存在隐式类型转换,因此所有的转换都必须显式声明。
v1 := T(v)
参数 | 描述 |
---|---|
T | 需要转换的数据类型,比如 int32,int64,float32 等等。 |
v | 需要转换的变量。 |
v1 | 转换成 T 类型之后的变量。 |
将变量 v 转换为类型 T,返回的 v1 是转换后的变量。
在 Go 语言类型转换过程中,从一个取值范围较小的类型转换到一个取值范围较大的类型(例如将 int16 转换为 int32),完全正确。
当从一个取值范围较大的转换到取值范围较小的类型时(例如将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。
从 float32 类型转换成 int32 类型
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello 嗨客网(www.haicoder.net)")
var fScore float32 = 99.5
var iScore = int32(fScore)
fmt.Println("fScore = ", fScore, "iScore =", iScore)
}
程序运行后,控制台输出如下:
首先, 我们定义了一个 float32 类型的 变量 fScore,并赋值为 99.5。接着,我们将 float32 类型的变量 fScore,强制类型转换为 int32 类型,并赋值给 iScore。
最后,我们打印 fScore 的值和 iScore 的值,fScore 的值没有被改变,还是原来的值,iScore 的值是强制类型转换后的值。
因为我们是从 float32 类型的变量转换到 int32,所以丢失了精度。
使用类型自动推导,数字类型默认为 int 类型
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello 嗨客网(www.haicoder.net)")
var score = 99
var iScore int32 = int32(score)
fmt.Println("score = ", score, "iScore =", iScore)
}
程序运行后,控制台输出如下:
首先,我们使用类型自动推导定义了一个变量 score,数字类型使用类型自动推导的类型为 int 类型。接着,我们使用强制类型转换,将 int 类型的变量强制类型转换为 int32 类型。
在 Go 语言中,一个类型的值可以被转换成另一种类型的值,这个转换就叫做类型转换。Go 语言类型转换中不存在隐式类型转换,因此所有的转换都必须显式声明。
Go 语言类型转换时当从一个取值范围较大的转换到取值范围较小的类型时(例如将 int32 转换为 int16 或将 float32 转换为 int),会发生精度丢失(截断)的情况。