Golang中的类型转换介绍

Golang中存在4种类型转换,分别是:断言、显式、隐式、强制。下面我将一一介绍每种转换使用场景和方法

一、断言类型转换

主要是判断变量是否可以转换成某一类型。断言主要用于变量是interface{}类型(接口类型)的情况,且变量值必须与要转换类型一致。可以细分为2种使用方式

  • 普通断言
  • switch断言

1.1 普通断言示例

复制代码
// 定义一个接口类型变量
var userInfo interface{}
// 定义一个map类型变量
userInfoNew := map[string]int{
	"phoneNum": 123456,
	"age":      18,
}
// 由于interface{}可以接收任何类型变量,因此可以将map类型变量赋值给它
userInfo = userInfoNew
// 此时userInfo变量类型仍为interface{},但变量值是map类型,若想获取变量值需采用断言进行类型转换
res, _ := userInfo.(map[string]int)
fmt.Println("age:", res["age"])

输出结果:

复制代码
age: 18

1.2 switch断言示例

复制代码
var userInfo interface{} = "user info"
switch val := userInfo.(type) {
case float32:
	fmt.Printf("userInfo变量的类型为%T userInfo变量的值为%v\n", val, val)
case float64:
	fmt.Printf("userInfo变量的类型为%T userInfo变量的值为%v\n", val, val)
case int:
	fmt.Printf("userInfo变量的类型为%T userInfo变量的值为%v\n", val, val)
case bool:
	fmt.Printf("userInfo变量的类型为%T userInfo变量的值为%v\n", val, val)
case string:
	fmt.Printf("userInfo变量的类型为%T userInfo变量的值为%v\n", val, val)
default:
	fmt.Println("非已知类型")
}

输出结果:

复制代码
userInfo变量的类型为string userInfo变量的值为user info

二、显示类型转换

细分为2种:

  • 表达式格式为:T(x),T为变量x要转换的最终类型。适用整型与浮点型互转,字节数组与字符串类型互转,结构体类型转换接口类型(反之不行)
  • 使用strconv包提供的方法
    1)strconv.Atoi():将字符串类型转成整数
    2)strconv.Itoa():将整数转成字符串类型

三、隐式类型转换

通常是程序内部自动转换,对开发人员无感知

四、强制类型转换

这个暂时未研究

相关推荐
利威尔xu2 天前
Go map 底层崩溃:3 个 goroutine 并发写同一张 map,fatal error 崩掉整个服务
golang·源码·map·并发·后端开发
利威尔xu3 天前
2026-11-08-Go-defer-panic-recover面试
面试·golang
JWASX4 天前
【Go】map 源码解析 - group
后端·golang·map·源码分析
联犀5 天前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
FungLeo5 天前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
联犀5 天前
联犀 Go SIMD 实战:视频转码从 16.5ms 到 5.46ms
开发语言·golang·音视频
紧跟先前的步伐6 天前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
利威尔xu6 天前
2026-11-05-Go内存管理面试
面试·golang
Zenova EdgeOS7 天前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
JavaPub-rodert7 天前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang