🔄 Go 类型转换全攻略|新手必看!强制转换不踩坑

2026-05-19 80 0

本篇基于 Go 1.25.1 版本,一次性讲透显式类型转换、数值互转、字符串互转,所有规则+坑点全覆盖✅


一、Go 类型转换核心规则(最重要!)

Go 是强类型语言,有一条铁律:
不支持隐式转换(不会自动帮你转)
必须手动显式转换
语法:目标类型(变量)

这是和 Java/Python 最大区别!


二、基础转换语法(背下来)

// 标准格式
T(v)    // 把值 v 转换成类型 T

示例:

var a int = 100
var b float64 = float64(a)  // int → float64

三、支持转换的类型表格

转换方向是否支持说明
int ↔ float✅ 支持数值类型互转
int ↔ int64✅ 支持整数长度互转
float ↔ string❌ 不支持必须用 strconv
int ↔ string❌ 不支持必须用 strconv
bool → 数值❌ 不支持Go 禁止

四、基础数值类型转换(最常用)

1. int → float64

var age int = 20
f := float64(age)

2. float64 → int(直接截断小数)

var pi float64 = 3.1415
i := int(pi)  // 3

3. int8 → int32

var a int8 = 100
b := int32(a)

五、字符串 ↔ 数值(必须用 strconv)

Go 不能直接 string(123) 转数字!
必须使用官方包 strconv

1. string → int

numStr := "100"
num, err := strconv.Atoi(numStr)

2. int → string

num := 200
str := strconv.Itoa(num)

3. string ↔ float64

// string → float
f, _ := strconv.ParseFloat("3.14", 64)

// float → string
s := strconv.FormatFloat(3.14, 'f', 2, 64)

六、完整可运行 Demo(本地直接跑)

main.go 全覆盖、零语法错误、可直接运行👇

package main

import (
    "fmt"
    "strconv"
)

func main() {
    fmt.Println("=== 1. 基础数值转换 ===")
    var a int = 100
    var b float64 = float64(a)
    var c int = int(b)
    fmt.Println("int → float:", b)
    fmt.Println("float → int:", c)

    fmt.Println("\n=== 2. 整数长度转换 ===")
    var small int8 = 10
    var big int64 = int64(small)
    fmt.Println("int8 → int64:", big)

    fmt.Println("\n=== 3. 字符串与 int 互转 ===")
    // string → int
    numStr := "666"
    num, _ := strconv.Atoi(numStr)
    // int → string
    str := strconv.Itoa(888)
    fmt.Println("string→int:", num)
    fmt.Println("int→string:", str)

    fmt.Println("\n=== 4. 字符串与 float 互转 ===")
    floatStr := "3.14159"
    floatVal, _ := strconv.ParseFloat(floatStr, 64)
    float2Str := strconv.FormatFloat(floatVal, 'f', 2, 64)
    fmt.Println("string→float:", floatVal)
    fmt.Println("float→string:", float2Str)
}

运行命令:

go run main.go

运行结果:

=== 1. 基础数值转换 ===
int → float: 100
float → int: 100

=== 2. 整数长度转换 ===
int8 → int64: 10

=== 3. 字符串与 int 互转 ===
string→int: 666
int→string: 888

=== 4. 字符串与 float 互转 ===
string→float: 3.14159
float→string: 3.14

七、新手必避 5 大天坑(超级重要)

❌ 错误 1:直接用 string() 转数字(经典错误)

s := string(100)  // 得到的是 ASCII 字符,不是 "100"

✅ 正确:

s := strconv.Itoa(100)

❌ 错误 2:隐式转换(直接赋值)

var a int = 10
var b float64 = a  // 报错!

✅ 正确:

var b float64 = float64(a)

❌ 错误 3:bool 转 int(Go 不支持)

a := int(true)  // 报错!

❌ 错误 4:超大数值转短类型(溢出)

var a int64 = 100000
var b int8 = int8(a)  // 溢出,结果错误

❌ 错误 5:float 转 int 丢失精度

float64(9.9) → int = 9  // 直接截断

八、类型转换速查表(收藏)

转换场景正确写法
int → float64float64(num)
float64 → intint(f)
int → stringstrconv.Itoa(num)
string → intstrconv.Atoi(s)
float → stringstrconv.FormatFloat(...)
string → floatstrconv.ParseFloat(...)

📌 总结

  1. 1. Go 只支持显式转换:必须写 T(v)
  2. 2. 数值互转直接强转
  3. 3. 字符串 ↔ 数值必须用 strconv
  4. 4. 禁止 bool 转数字
  5. 5. 不能隐式转换,不能偷懒

掌握这些,Go 类型转换再也不会报错啦✨

相关文章

🚨 Go 变量遮蔽|新手最容易踩的隐形坑!一篇避坑
🌍 Go 变量作用域全解|全局·局部·块作用域一次吃透
🔍 Go 空白标识符 _ 全攻略|忽略值·导包神器用法大全
🚀 Go main 函数详解|程序入口核心玩法全掌握
🚀 Go init 函数详解|程序初始化的秘密入口
🔑 Go 可见性规则|大小写决定一切!新手必懂

发布评论