golang中有哪些断言类型
发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,今天就跟大家聊聊有关golang中有哪些断言类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1)语法一t := i.(T)解释说明:T:表示
千家信息网最后更新 2024年12月12日golang中有哪些断言类型
今天就跟大家聊聊有关golang中有哪些断言类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
1)语法一
t := i.(T)
解释说明:
T:表示的是具体的数据类型,i:表示的是接口变量i,t:表示的是转换之后的变量。
功能介绍:
这个语句实现的功能是:将接口变量i按照类型T转换成t,其中t中的值是i转换得来的,一旦转换不成功就会触发一个panic。
2)除此之外还有另外一个写法:
t, ok := i.(T)
功能介绍:
表达式里面多了一个ok,实现的功能是:将接口i按照类型T转换成t,如果类型匹配ok=true,如果类型不匹配,ok=false。改语句不会触发panic。
3)例子如下所示:
package main
import "fmt"
func main() {
var i interface{} = "hello world"
str := i.(string) // 1.接口i是string类型,会将"hello world"赋值给str
fmt.Println(str)
s, ok := i.(string) // 2.接口类型是string,会将"hello world"赋值给s,并且ok=true
fmt.Println(s, ok)
idx, ok := i.(int) // 3.接口类型不是int,ok=false,idx不会从i获取到数值
fmt.Println(idx, ok)
idx = i.(int) // 4.接口i不是int类型,会触发panic
fmt.Println(idx)
}
Output:
hello world
hello world true
0 false
panic: interface conversion: interface {} is string, not int
goroutine 1 [running]:
main.main()
/tmp/sandbox277669744/prog.go:17 +0x1f4
3.断言类型的使用场景:
1)T的类型是具体类型
类型断言检查x的动态类型是否等于具体类型T。如果检查成功,类型断言返回的结果是x的动态值,其类型是T。
例子可以参考2中的例子,并无特别的不同之处。
2)T的类型是接口类型
类型断言检查x的动态类型是否满足T。如果检查成功,x的动态值不会被提取,返回值是一个类型为T的接口值。换句话说,到接口类型的类型断言,改变了表达式的类型,改变了(通常是扩大了)可以访问的方法,且保护了接口值内部的动态类型和值。
例子:
package main
import (
"fmt"
)
type I interface {
walk()
}
type J interface {
fly()
}
type A struct{}
func (a A) walk() {
fmt.Println("walk!")
}
func (a A) fly() {
fmt.Println("fly!")
}
func main() {
var i I
i = A{} // dynamic type of i is A
fmt.Printf("%T\n", i.(A))
// i.fly() // 报错:./prog.go:26:6: i.fly undefined (type I has no field or method fly)
var j J
j = i.(J) // 这里将i中的值转换成接口J这一个类型
fmt.Printf("%T\n", j)
j.fly()
}
Output:
main.Amain.Afly!
看完上述内容,你们对golang中有哪些断言类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
类型
接口
i.
动态
例子
功能
检查
成功
内容
变量
表达式
语句
不同
写法
场景
换句话说
数值
数据
方法
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
重庆边缘融合服务器厂家虚拟主机
我的世界宠物go服务器
网络安全开发包有哪些
网络安全拓扑图需要代码嘛
网络安全宣传周 专刊
海康威视网络安全工程师
LOL录像软件开发
shell服务器基本命令
幼儿园校园网络安全工作方案
微盟数据库有什么好处
联系人数据库
安卓room 数据库加密
生死狙击2下一次服务器开放时间
计算机三级分数网络技术分布
亳州餐饮软件开发哪家好
青冈im即时通讯软件开发
添加数据库数据库文件位置
万方数据库重复率
软件开发项目分工
网络安全五小结一总结
第一届网络安全小主播
网络安全作业选择题
pb开发数据库
数据库系统概念英文版
网络安全保卫大队基本情况
机关各科室网络安全意识淡薄自查
服务器云计算上游是什么
消费者数据库技术路线图
远程服务器打不开软件怎么解决
深圳圆梦互联网科技