跳到主要内容

Go 语言类型转换

在 Go 语言中,类型转换(Type Casting 或 Type Conversion)是一种将一个类型的值转换为另一种类型的操作,比如将 float32 数据类型的变量转换为 int32 类型的变量。类型转换可以在不同数据类型之间进行,但必须是相互兼容的类型。

提示

本文所有示例代码可在 GitHub 下载。

类型转换概述

类型转换用于在不同类型之间转换数据,以便进行适当的操作。在转换之前,需要确保目标类型可以容纳源类型的值,否则可能会导致精度丢失或溢出。

Go 语言类型转换的语法格式如下:

Type(expression)

其中,Type 表示目标类型,expression 表示要转换的值。

请看下面实例:

type_casting_example_01.go
package main

import "fmt"

func main() {
var sum int = 17
var count int = 5
var mean float32

mean = float32(sum) / float32(count)
fmt.Printf("mean 的值为 %f\n", mean)
}

在这个实例中,我们先将 sumcount 由整型转化为浮点型,再计算结果,将结果赋值给浮点型变量 mean

以上实例执行输出结果为:

mean 的值为 3.400000

隐式转换类型

Go 语言不支持隐式转换类型!也就是说,不同类型的变量参与运算时,需要显式进行类型转换。

例如上面的实例中,如果直接使用 mean = sum / count 计算,那么在编译时会出现如下错误:

cannot use sum / count (value of type int) as float32 value in assignment

再来看一个实例:

type_casting_example_02.go
package main
import "fmt"

func main() {
var a int64 = 3
var b int32
b = a
fmt.Printf("b = %d\n", b)
}

编译时出现如下错误:

7:9: cannot use a (variable of type int64) as int32 value in assignment

这个错误出现在第 7 行代码,b = a 赋值语句,虽然 ab 都是整型,但依然无法编译通过。

解决办法是在赋值时进行类型转换,代码如下:

type_casting_example_02.go
package main
import "fmt"

func main() {
var a int64 = 3
var b int32
b = int32(a)
fmt.Printf("b = %d\n", b)
}

以上实例执行输出结果为:

b = 3