跳到主要内容

Go 类型转换

字面量的默认类型

Go 语言中的字面量在没有指定类型时,会被赋予默认类型。

字面量值默认类型
整数(如 42int
浮点数(如 3.14float64
复数(如 1 + 2icomplex128
字符串(如 "hello"string
布尔值(truefalsebool

类型转换的基本语法

在 Go 语言中,可以使用 T(v) 的语法实现类型转换,其中 T 是目标类型,v 是要转换的值。

x := 42          // x 是 int 类型
y := float64(x) // y 是 float64 类型,值为 42.0

数值类型之间的转换

数值类型之间可以进行显式转换,例如从 intfloat64,或从 float64int。需要注意的是,从浮点数转换为整数时,小数部分会被截断。

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.Itoaint 类型转换为字符串。

i := 123
s := strconv.Itoa(i)
fmt.Println(s) // 输出 "123"

使用 strconv.FormatFloatfloat64 类型转换为字符串,并指定格式。

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 包来进行类型检查,特别是在处理接口和未知类型时。