当前位置: 首页 > news >正文

关于类型断言的小细节

第一:类型断言是什么?

答:类型断言是go语言中专门用来判断空接口承接数据的类型的一种方式

第二:类型断言的语法?

- 第一是用一个变量去承接类型断言,如果类型判断符合,就会返回空接口承接的本来的值,如果不正确就会引发panic。

package mainimport "fmt"func main() {var try interface{} = 1v := try.(int)fmt.Printf("变量try的类型确实是int类型,值为%d\n", v)}
//输出为变量try的类型确实是int类型,值为1
package mainimport "fmt"func main() {var try interface{} = 1v := try.(string)fmt.Printf("变量try的类型确实是int类型,值为%d\n", v)}panic: interface conversion: interface {} is int, not stringgoroutine 1 [running]:
main.main()/Users/wangziheng01/go/src/main/main.go:8 +0x34
exit status 2

- 第二就是用两个变量却承接类型断言,如果判断错误(即接口值的类型与断言的类型不匹配),那么

第一个返回值将是断言类型的零值,第二个返回值将是 false。

package mainimport "fmt"func main() {var try interface{} = 1v, ok := try.(string)if ok {fmt.Printf("变量ok的值为%v\n", ok)fmt.Printf("变量try的值是%v\n", v)} else {fmt.Printf("变量ok的值为%v\n", ok)fmt.Printf("变量try的值是%v\n", v)}}
/*
变量ok的值为false
变量try的值是
/*

假如判断正确,那么第一个返回值就是原来的值,第二个返回值就是true。

package mainimport "fmt"func main() {var try interface{} = 1v, ok := try.(int)if ok {fmt.Printf("变量ok的值为%v\n", ok)fmt.Printf("变量try的值是%v\n", v)} else {fmt.Printf("变量ok的值为%v\n", ok)fmt.Printf("变量try的值是%v\n", v)}}
/*
变量ok的值为true
变量try的值是1
/*

第三:类型断言常用于判断空接口类型的方式?

package mainfunc main() {var try interface{} = 1switch try.(type) {case int:println("int")case string:println("string")case bool:println("bool")default:println("other")}}

结果就会输出 int。

另外,value.(type) 是 Go 语言中的一个特殊语法,用于在 switch 语句中获取接口值的具体类型。这种语法只能在 switch 语句中使用,不能在其他地方使用。

http://www.dtcms.com/a/242394.html

相关文章:

  • 【SAP MM SD FICO】销售视图和会计视图
  • 数据库——MongoDB
  • Java判断规则工具类
  • 【杂谈】-递归进化:人工智能的自我改进与监管挑战
  • 60天python训练计划----day50
  • 如何判断Cursor邮箱被封?
  • 《ZLMediaKit 全流程实战:从部署到 API 调用与前后端集成》
  • 【生物信息学】摇摆配对(Wobble Hypothesis)
  • RAG系统向量数据库选型与Prompt Engineering鲁棒性测试实践
  • 人工智能产业融合新时代:路径、挑战与战略思维
  • 从设备监控到人员调度,可视化赋能车间全场景
  • KubeSphere 容器平台高可用:环境搭建与可视化操作指南
  • go全局配置redis,全局只需要连接一次,然后全局可以引用使用
  • 光伏功率预测 | BP神经网络多变量单步光伏功率预测(Matlab完整源码和数据)
  • filebeat原理架构
  • 可视化在车间质量管控中的创新应用,提升品质
  • QT中实现tcp连接
  • 计算机网络笔记(三十四)——5.6TCP可靠传输的实现
  • node+express+jwt+sequelize+mysql+本地服务器部署前端+云服务器公网部署:入门教程
  • 2N65-ASEMI电源领域核心组件2N65
  • 目标跟踪_学习
  • 【大模型】解耦大语言模型中的记忆与推理能力
  • 6.10 - 常用 SQL 语句以及知识点
  • ArcGIS Pro 3.4 二次开发 - 流图层
  • linux等保思路与例题
  • 什么是软件开发的边际成本?有什么作用?
  • vue 监听页面滚动
  • Linux下V2Ray安装配置指南
  • linux thermal framework(1)_概述
  • LIGHT (数据库操作)