Go语言中的断言机制详解

发表时间: 2024-05-18 09:05

什么是golang类型断言?

来看这样一个问题,什么是golang类型断言?这也是初学者面临的困惑。golang类型断言有点像这个类型转换,但是它不是传统意义上的类型转换,有一种关系,一般是将抽象的类型,一般是接口类型。

当然高版本里边了,英特face两个大块可以简写成any,这样一个类型可以转化成具体的类型。通过类型断言来判断一下这个类型是不是具体类型。下边举个例子给大家解释一下。

·比如首先定义一个one,一个s,它是什么类型?给它一个any这样一个类型,给它一个多克三六零点空。现在要判断一下,因为是any类型,这个地方也可以这样写,把它组织掉,copy一下代码放在下边,这个地方any也可以替换成interface两个大括号。其实这两个是一样的,any和interface就是一个别名的关系。

·接下来要判断,假设不知道,因为是any类型,要判断它是不是自由串和是不是一个整形。怎么样来判断?这边有个语法,就是这样的。比如这个里边是a,ok,它会返回两个值,s点后边跟上一个信,有点像类型转化,这个就叫类型断言。

·要判断一下当前s变量是不是嵌套类型,如果嵌套类型,ok会返回一个这个处,ok就是一个处,如果s是自负反,否则返回一个boss。如果返回一个处,这个地方就起到了嵌套差内容了,把a打印一下,a打印输出,把ok也打印输出一下,ok点print出来。

·现在来看一下这个,ok还有这个a,这个就是具体的内容了,ok是一个处,一般是这样来判断,如果这个地方ok为处,就认为它是一个走法,就是这个地方写一个直接拼出来,打印输出一个s,这个是制服串,制服串里面可以打印一个i,i s怎么样?不是,它不是一个组成。

·假如再来一个判断,下边是b逗号,这个ok冒号等于s点,把它锻炼成整形,上边其实已经知道这个地方就是轴上,把它锻炼成整形。

·再来打印一下这个ok,点print,b点print,下面来进行看结果。现在会看到这个地方,这个有点这个,看这个ok是什么?ok是一个false,把ok二改成ok二,这个地方也是ok二,否则就是乱套了。这个地方也给这个就这样打听,直接用行。

·现在看到的是ok二是什么?ok二是一个boss,也就说断言之后不是一个整形,所以返回一个foss,而b因为没有断言成功,所以b就取一个默认值是一个零,是这样一个结果。这是有关断言是怎么样来用的。

·具体再来看一下文档,光浪里边的断言英文叫typeadsertion,是用于将接口类型转换为具特类型的一种机制。接口类型是一个抽象的,它可以保存任意实现了接口的值。

·刚才提到了里边可以用and来代替interface这个大块断言语法格式,刚才已经解释了,前边是抽象类型,点括号里边是具体的类型。就像刚才这样断言s点二括号里边的具体类型,这是做饭还是一个整形,这是一个断言。

·返回值一个value一个ok,value就是转换后的一个类型,而这个ok是一个word类型,判断断言是不是成功了。

下边这个例子跟刚才举那个是一样的,有什么用途?断言主要是通过断言将接口类型转换为具体类型,从而访问具体类型里边的一些方法和字段。这里边不光可以是自助串,还可以是自定一些类型,比如可以tyi定一个animal,animal这样一个接口,接口里边假如要有一个it这样一个方法。

下边可以tys定义dog,再定义什么?tys定一个cat,到cat都实现it接口。接下来可以断言什么?上边定一个类型是animal类型的,可以把它锻炼成dog和cat,同样访问dog和cat里边的这些属性或者方法。

这就是刚才说的第二个就是类型检查和安全的转换,通过返回ok,判断类型检查是不是类型转换是不是成功,避免程序在运行时候因为类型转换而实现崩溃。

·第三、类型断言。类型断言也体现到刚才上边这个地方,给大家举这个例子,有animal、dog、ia、cat,这两个可以实现animal接口实现多肽性。

下边注意事项就是类型断言只适用于接口类型,不适应非接口类型。如果断言失败,未使用ok变量会产生panic,不确定类型的情况下使用带ok变量的安全的类型断言以避免运行时的错误。

古朗里边类型断言是非常好的转换工具,可以使代码更加的灵活和安全。