Go语言类型转换
提示
- 显示类型转换:Go 语言中的类型转换(类型铸造)是将一种数据类型(如整数、浮点数、字符串)显式转换为另一种数据类型的过程,例如使用
int()
、float32()
和string()
等函数。 - 类型转换示例:可以将浮点数转换为整数(丢失小数部分),或将整数转换为浮点数(添加小数点)。这种转换需要显式指定转换的目标类型。
- 隐式类型转换限制:Go 不支持隐式类型转换。尝试自动转换不兼容的数据类型(如将浮点数分配给整数变量)会导致编译错误。
类型转换是将一个数据类型(整数、浮点数、字符串)的值转换为另一种数据类型的过程。例如,
// 浮点型变量
var floatValue float = 9.8
// 将浮点型转换为整型
var intValue int = int(floatValue)
这里,int(floatValue)
表明我们正在将浮点值 9.8 转换为 9。
由于我们手动执行了类型转换,因此这称为 Go 中的显式类型转换。
Go 显式类型转换
Golang 提供了多种预定义函数,如 int()
、float32()
、string()
等,用于执行显式类型转换。
让我们看一些显式类型转换的例子:
示例:Go 浮点型转整型
package main
import "fmt"
func main() {
var floatValue float32 = 5.45
// 从浮点型转换为整型
var intValue int = int(floatValue)
fmt.Printf("浮点值为 %g\n", floatValue)
fmt.Printf("整数值为 %d", intValue)
}
输出
浮点值为 5.45
整数值为 5
这里,我们使用了函数 int()
将值从 5.45 转换为 5。
在这种情况下,我们手动地将一种类型转换为另一种类型。因此,这被称为显式类型转换。
示例:Go 整型转浮点型
package main
import "fmt"
func main() {
var intValue int = 2
// 从整型转换为浮点型
var floatValue float32 = float32(intValue)
fmt.Printf("整数值为 %d\n", intValue)
fmt.Printf("浮点值为 %f", floatValue)
}
输出:
整数值为 2
浮点值为 2.000000
这里,我们使用了函数 float32()
将一个整数值转换为浮点数。整数值 2 在类型转换后变成了 2.000000。
Go 隐式类型转换
在隐式类型转换中,一种数据类型会自动转换为另一种数据类型。然而,Go 不支持隐式类型转换。例如,
package main
import "fmt"
func main() {
// 初始化整型变量为浮点数
var number int = 4.34
fmt.Printf("数字为 %g", number)
}
在上面的例子中,我们创建了一个名为 number 的 int
类型变量。这里,我们试图将一个浮点值 4.34 赋值给 int
变量。
当我们运行这个程序时,会得到一个错误:
./prog.go:8:7: 常量 4.34 截断为整数
这是因为 Golang 不支持隐式类型转换。
示例:使用 Go 类型转换加整型和浮点数
package main
import "fmt"
func main() {
var number1 int = 20
var number2 float32 = 5.7
var sum float32
// 不同数据类型的加法
sum = float32(number1) + number2
fmt.Printf("总和为 %g",sum)
}
输出:
总和为 25.7
在上面的例子中,我们创建了一个名为 number1 的整型变量和一个名为 number2 的浮点型变量。注意这一行,
sum = float32(number1) + number2
这里,我们正在将两种不同类型(float
和 int
)的值相加。由于 Go 不支持隐式类型转换,我们需要将一种类型的值转换为另一种类型。
这就是为什么我们使用了 float32(number1)
将 int
类型变量 number 转换为 float
类型。