跳到主要内容

Go语言类型转换

提示
  1. 显示类型转换:Go 语言中的类型转换(类型铸造)是将一种数据类型(如整数、浮点数、字符串)显式转换为另一种数据类型的过程,例如使用 int()float32()string() 等函数。
  2. 类型转换示例:可以将浮点数转换为整数(丢失小数部分),或将整数转换为浮点数(添加小数点)。这种转换需要显式指定转换的目标类型。
  3. 隐式类型转换限制: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

这里,我们正在将两种不同类型(floatint)的值相加。由于 Go 不支持隐式类型转换,我们需要将一种类型的值转换为另一种类型。

这就是为什么我们使用了 float32(number1)int 类型变量 number 转换为 float 类型。