Go 类型转换
字面量的默认类型
Go 语言中的字面量在没有指定类型时,会被赋予默认类型。
字面量值 | 默认类型 |
---|---|
整数(如 42 ) | int |
浮点数(如 3.14 ) | float64 |
复数(如 1 + 2i ) | complex128 |
字符串(如 "hello" ) | string |
布尔值(true 或 false ) | bool |
类型转换的基本语法
在 Go 语言中,可以使用 T(v)
的语法实现类型转换,其中 T
是目标类型,v
是要转换的值。
x := 42 // x 是 int 类型
y := float64(x) // y 是 float64 类型,值为 42.0
数值类型之间的转换
数值类型之间可以进行显式转换,例如从 int
到 float64
,或从 float64
到 int
。需要注意的是,从浮点数转换为整数时,小数部分会被截断。
var f float64 = 5.9
var i int = int(f) // i 的值为 5
在实际编程中,我会特别注意这种截断行为,避免引入错误。
字符串与数值类型的转换
在处理字符串和数值类型的转换时,Go 提供了 strconv
包,其中包含了一系列实用函数。
将字符串转换为数值
使用 strconv.Atoi
将字符串转换为 int
类型。
import "strconv"
s := "123"
i, err := strconv.Atoi(s)
if err != nil {
fmt.Println(err)
}
fmt.Println(i) // 输出 123
使用 strconv.ParseFloat
将字符串转换为 float64
类型。
s := "123.45"
f64, err := strconv.ParseFloat(s, 64)
if err != nil {
fmt.Println(err)
}
fmt.Println(f64) // 输出 123.45
将数值转换为字符串
使用 strconv.Itoa
将 int
类型转换为字符串。
i := 123
s := strconv.Itoa(i)
fmt.Println(s) // 输出 "123"
使用 strconv.FormatFloat
将 float64
类型转换为字符串,并指定格式。
import "strconv"
f := 123.456
s := strconv.FormatFloat(f, 'f', 2, 64) // 'f' 表示格式,2 表示小数点后位数
fmt.Println(s) // 输出 "123.46"
接口类型的转换
当处理接口类型时,可以使用类型断言来检查或转换接口类型的值。
var i interface{} = 42
x, ok := i.(int)
if ok {
fmt.Println("类型转换成功", x)
} else {
fmt.Println("类型转换失败")
}
数组与切片的转换
可以通过切片操作符从数组中获取切片。
arr := [3]int{1, 2, 3}
slc := arr[:]
fmt.Println(slc) // 输出 [1 2 3]
获取变量的类型
在 Go 中,可以使用 reflect
包来获取变量的类型信息。
import (
"fmt"
"reflect"
)
a := true
aType := reflect.TypeOf(a)
fmt.Println(aType) // 输出 bool
b := 1
bType := reflect.ValueOf(b).Kind()
fmt.Println(bType) // 输出 int
在开发中,我经常使用 reflect
包来进行类型检查,特别是在处理接口和未知类型时。