我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

golang中有哪些断言类型

今天就跟大家聊聊有关golang中有哪些断言类型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

成都创新互联主营旌德网站建设的网络公司,主营网站建设方案,APP应用开发,旌德h5成都小程序开发搭建,旌德网站营销推广欢迎旌德等地区企业咨询

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 worldhello world true0 falsepanic: 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中有哪些断言类型有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


当前标题:golang中有哪些断言类型
URL地址:http://shouzuofang.com/article/psohjs.html

其他资讯