本篇基于 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) // 33. 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 → float64 | float64(num) |
| float64 → int | int(f) |
| int → string | strconv.Itoa(num) |
| string → int | strconv.Atoi(s) |
| float → string | strconv.FormatFloat(...) |
| string → float | strconv.ParseFloat(...) |
📌 总结
- 1. Go 只支持显式转换:必须写
T(v) - 2. 数值互转直接强转
- 3. 字符串 ↔ 数值必须用 strconv
- 4. 禁止 bool 转数字
- 5. 不能隐式转换,不能偷懒
掌握这些,Go 类型转换再也不会报错啦✨
MiaoAll