初面网初面网

类型转换

类型转换用于将一种数据类型的变量转换为另外一种类型的变量。

Go 语言类型转换基本格式:

type_name(expression)

type_name 为类型,expression 为表达式。

Go 不支持隐式类型转换,比如 int64 不能直接赋值给 int32,必须显式转换 b = int32(a),否则编译报错

数值类型转换

将整型转换为浮点型,并计算结果:

package main

import "fmt"

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

    // int 转 float32,否则整数相除结果为3而不是3.4
    mean = float32(sum) / float32(count)
    fmt.Printf("mean 的值为: %f\n", mean)
}

输出:

mean 的值为: 3.400000

int转float

a := 10
b := float64(a)
fmt.Printf("a的类型是%T, b的类型是%T", a, b)

float转int

var a float32 = 23.3
b := int(a) // 小数部分被直接截断丢弃,不会四舍五入
fmt.Printf("b的值为%v, b的类型%T", b, b)

字符串与数值互转 strconv

strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,可以用空白标识符 _ 忽略这个错误。

字符串转整数

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "123"
    num, err := strconv.Atoi(str)
    if err != nil {
        fmt.Println("转换错误:", err)
    } else {
        fmt.Printf("字符串 '%s' 转换为整数为:%d\n", str, num)
    }
}

整数转字符串

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num := 123
    str := strconv.Itoa(num)
    fmt.Printf("整数 %d 转换为字符串为:'%s'\n", num, str)
}

字符串转浮点数

package main

import (
    "fmt"
    "strconv"
)

func main() {
    str := "3.14"
    num, err := strconv.ParseFloat(str, 64) // 64 表示 float64
    if err != nil {
        fmt.Println("转换错误:", err)
    } else {
        fmt.Printf("字符串 '%s' 转为浮点型为:%f\n", str, num)
    }
}

浮点数转字符串

package main

import (
    "fmt"
    "strconv"
)

func main() {
    num := 3.14
    str := strconv.FormatFloat(num, 'f', 2, 64) // 'f'格式,保留2位小数,float64
    fmt.Printf("浮点数 %f 转为字符串为:'%s'\n", num, str)
}

strconv 常用函数速查

函数作用示例
strconv.Atoi(str)字符串转 int,返回(int, error)n, err := strconv.Atoi("123")
strconv.Itoa(num)int 转字符串s := strconv.Itoa(123)
strconv.ParseFloat(str, 64)字符串转 float,返回(float64, error)f, err := strconv.ParseFloat("3.14", 64)
strconv.FormatFloat(num, 'f', 2, 64)float 转字符串s := strconv.FormatFloat(3.14, 'f', 2, 64)

类型转换示例汇总

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // int 转 float64
    a := 10
    b := float64(a)
    fmt.Printf("a:%T %d,b:%T %f\n", a, a, b, b)

    // float 转 int,截断小数
    var c float32 = 23.3
    d := int(c)
    fmt.Printf("c:%T %f,d:%T %d\n", c, c, d, d)

    // string 转 int
    aStr := "100"
    bInt, err := strconv.Atoi(aStr)
    if err == nil {
        fmt.Printf("aStr:%T %s,bInt:%T %d\n", aStr, aStr, bInt, bInt)
    } else {
        fmt.Printf("err:%s\n", err)
    }

    // int 转 string
    cInt := 200
    dStr := strconv.Itoa(cInt)
    fmt.Printf("cInt:%T %d,dStr:%T %s\n", cInt, cInt, dStr, dStr)
}

更新于 2026/8/13