golang中有哪些断言类型
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,今天就跟大家聊聊有关golang中有哪些断言类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1)语法一t := i.(T)解释说明:T:表示
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
2022梦幻新区开服务器列表
招软件开发单位的资质要求
软件开发包括网络安全吗
c 数据库编程
ktv服务器怎么调歌
数据库查询最近一周显示数据
服务器数据管理软件
在哪下载明日之后才有官方服务器
维普数据库包括哪些资源
比特彗星服务器
软件开发行业利润怎么算
建立数据库高中信息技术面试
数据库成语接龙同音接龙
藁城租房软件开发
学电脑的软件开发
云主机网络技术规划
上海软件开发人力外包哪个好
应用云服务器租赁费用
王国纪元怎么开服务器
服务器软件管理Linux
c 数据库编程
郑州加油软件开发
龙岩灿龙互联网科技
如何建立农业种植区数据库
网络技术服务协议范本
数据库分布式什么意思
降本增效 软件开发
排班系统数据库表设计
工程造价与软件开发哪个好
数据库实体图关系符号解释