go 中的数据类型转换需要显示转换
一、基本语法
- 显示转换的语法格式为:T(v),其中 T 是要转换成的类型,v 是要转换的值。例如:
package main
import "fmt"
func main() {
var i int = 42
var f float64 = float64(i) // 将 int 转换为 float64
var s string = string(i) // 将 int 转换为 string(对应 Unicode 码点)
fmt.Printf("i 的类型为%T\n", i) // 输出:i 的类型为int
fmt.Printf("f 的类型为%T\n", f) // 输出:f 的类型为float64
fmt.Printf("s 的类型为%T\n", s) // 输出:s 的类型为string
}
二、基本数据类型转换的注意事项
- go 中,数据类型的转换可以从 范围大-》小 范围小-》大 进行转换,但需要注意可能会发生数据丢失或溢出
- 当转换为字符串类型时,go 会将整数值解释为对应的 Unicode 码点,并返回一个包含该字符的字符串。例如,string(65) 会返回 "A",因为 65 是字符 'A' 的 Unicode 码点
- 被转换变量的类型没有发生变化,只是得到了一个新的值,该值的类型是转换后的类型。例如,float64(i) 返回一个 float64 类型的值,但 i 仍然是 int 类型
- 转换过程中出现溢出,编译不会报错,但运行时会得到一个不正确的结果。例如,int8(-130) 会得到 126,因为 -130 超出了 int8 的范围,发生了溢出
- 不同类型的变量进行运算赋值时,需要先转为统一类型,否则会编译报错。例如,var i int = 42; var f float64 = 3.14; i = f // 编译错误,需要先转换为统一类型,如 i = int(f) 或 f = float64(i)
三、演示
package main
import "fmt"
func main() {
// 1、整数类型转换,范围大-》小,范围小-》大会出现溢出
var i int = 300
var i8 int8 = int8(i) // 将 int 转换为 int8,发生溢出
fmt.Printf("i8 的值为 %d,类型为 %T\n", i8, i8) // 输出:i8 的值为 44,类型为 int8
// 2、整型转为字符串,整数值被解释为 Unicode 码点
var s string = string(8364) // 将整数 8364 转换为字符串,得到 "€"
fmt.Printf("s 的值为 %s,类型为 %T\n", s, s) // 输出:s 的值为 €,类型为 string
// 3、被转换变量的类型没有发生变化
var n int = 10
var f float64 = float64(n) // 将 int 转换为 float64
fmt.Printf("n 的值为 %d,类型为 %T\n", n, n) // 输出:n 的值为 10,类型为 int
fmt.Printf("f 的值为 %f,类型为 %T\n", f, f) // 输出:f 的值为 10.000000,类型为 float64
// 4、不同类型的变量进行运算赋值时,需要先转为统一类型,否则会编译报错
var a int = 5
var b float64 = 2.5
// var c float64 = a + b // 编译错误,无法将 int 和 float64 直接相加
var c float64 = float64(a) + b // 先将 a 转换为 float64,再进行运算
}