网站首页 > 文章精选 正文
引言
类型断言和类型转换是在 Go 语言中处理动态类型数据的关键工具。类型断言用于在运行时检查一个接口变量的具体类型,并将其转换为该类型。类型转换则用于将一个值从一种类型转换为另一种类型。
1. 类型断言
- 基本语法:
- 使用 value.(type) 形式来断言接口变量的具体类型。
- 示例:
var i interface{} = 42
if num, ok := i.(int); ok {
fmt.Println(num)
}
- 使用类型断言:
- 类型断言用于从接口变量中提取具体类型值。
- 示例:
var i interface{} = "hello"
if str, ok := i.(string); ok {
fmt.Println(str)
}
- 类型断言失败:
- 如果类型断言失败,则返回 false 和零值。
- 示例:
var i interface{} = 42
if str, ok := i.(string); ok {
fmt.Println(str)
} else {
fmt.Println("Not a string")
}
2. 类型转换
- 基本语法:
- 使用 (type) value 形式来进行类型转换。
- 示例:
var f float64 = 3.14
i := int(f)
fmt.Println(i) // 输出 3
- 隐式转换:
- Go 不支持隐式类型转换,必须显式进行转换。
- 示例:
var i int = 42 var f float64 = float64(i)
- 强制转换:
- 类型转换可能会导致精度损失或截断。
- 示例:
var f float64 = 3.14 i := int(f) // 截断小数部分 fmt.Println(i) // 输出 3
3. switch 语句与类型断言结合使用
- 结合 switch 语句和类型断言可以有效地处理不同类型的值。
- 示例:
var hello interface{} = "hello world"
switch val := hello.(type) {
case int:
fmt.Println("Integer:", val)
case string:
fmt.Println("String:", val)
case float64:
fmt.Println("Float64:", val)
default:
fmt.Println("Unknown type")
}
4. 示例代码
package main
import (
"fmt"
)
func main() {
// 类型断言
var i interface{} = 42
if num, ok := i.(int); ok {
fmt.Println(num) // 输出 42
} else {
fmt.Println("Not an int")
}
// 类型转换
var f float64 = 3.14
i = int(f) // 截断小数部分
fmt.Println(i) // 输出 3
// 复杂示例
var value interface{} = "Go is awesome"
if str, ok := value.(string); ok {
fmt.Println(str)
} else {
fmt.Println("Not a string")
}
// 类型转换与断言结合
var num interface{} = 42
if intVal, ok := num.(int); ok {
floatVal := float64(intVal)
fmt.Println(floatVal) // 输出 42.0
}
// 示例:使用具体的值
var hello interface{} = "hello world"
switch val := hello.(type) {
case int:
fmt.Println("Integer:", val)
case string:
fmt.Println("String:", val)
case float64:
fmt.Println("Float64:", val)
default:
fmt.Println("Unknown type")
}
猜你喜欢
- 2025-07-14 Go并发编程之WaitGroup(go语言 并发)
- 2025-07-14 golang企业微信告警(企业微信告警推送)
- 2025-07-14 2.8 Go语言中的for循环,break和continue
- 2025-07-14 Go语言Context包:最常用包之一的使用指南
- 2025-07-14 Go语言零到一:动态数组——切片(go语言的切片)
- 2025-07-14 2025-06-26:转换数组。用go语言,给你一个整数数组 nums,它被视
- 2025-07-14 go sync.Pool简介(go system)
- 2025-07-14 2025-07-13:统计特殊子序列的数目。用go语言,给定一个只包含正
- 2025-07-14 Go语言数据库编程:GORM 的基本使用
- 2025-07-14 2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)