Go中interface{}的注意事项是什么

免费教程   2024年05月11日 1:41  

这篇文章主要介绍“Go中interface{}的注意事项是什么”,在日常操作中,相信很多人在Go中interface{}的注意事项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go中interface{}的注意事项是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

{} 注意断言

正常的使用断言,写一个简单的 断言 demo

typeAnimalinterface{}funcmain(){varaAnimal="xiaomotong"v,ok:=a.(string)if!ok{fmt.Println("typeerror")}fmt.Println("v==",v)}

断言注意写成 2 个返回值的,一个是具体的值,一个是 bool,判断断言是否成功,若成功则说明断言正确,且 v 会被赋值为实际变量的值

切忌没头脑的强转

funcmain(){varaAnimal="xiaomotong"v:=a.(int)fmt.Println("v==",v)}

上述这种写法,若不判断是否断言成功,直接强转,程序是会 panic 的,执行上述程序后效果如下:

>go run main.gopanic: interface conversion: main.Animal is string, not intgoroutine 1 [running]:main.main() D:/mycode/my_new_first/interface_test/main.go:13 +0x4cexit status 2

程序崩掉,那就是线上问题了 xdm ,这里需要注意

当然我们也可以这样写

typeAnimalinterface{}funcmain(){varaAnimal="xiaomotong"switcha.(type){casestring:fmt.Println("atypeisstring")caseint:fmt.Println("atypeisint")}}

通过 switch 的方式来判断 接口的数据类型,根据不同的数据类型来做不同的事情,进行分类处理

用于反射的注意点

golang 里面有反射这个概念,简单来说,咱们可以通过反射包来实现获取接口真实的类型,和真实的数据

举个小例子:

通过反射来获取 Animal 接口的数据类型,和具体的数据值

typeAnimalinterface{}funcmain(){varaAnimal="xiaomotong"v:=reflect.ValueOf(a)fmt.Printf("vtype==",v.Type(),"v==",v.String())}

执行上述代码后效果如下:

> go run main.gov type == %!(EXTRA *reflect.rtype=string, string= v == , string=xiaomotong)

没毛病正常获取,但是如果我们这样写的话是不是也可以正确执行呢?

typeAnimalinterface{}funcmain(){varaAnimal="xiaomotong"v:=reflect.ValueOf(a)fmt.Printf("vtype==",v.Type(),"v==",v.Int())}

看这个例子也就和上面的例子相差在输出的时候,一个是v.String(),一个是v.Int(),可是结果却相差很大

go run main.gov type == %!(EXTRA *reflect.rtype=string, string= v == , string=xiaomotong)D:\mycode\my_new_first\interface_test>go run main.gopanic: reflect: call of reflect.Value.Int on string Valuegoroutine 1 [running]:reflect.Value.Int(...) C:/Program Files/Go/src/reflect/value.go:999main.main() D:/mycode/my_new_first/interface_test/main.go:26 +0x2bdexit status 2

执行上述代码,go 程序给我们报了 panic 错误,这里需要注意,程序崩溃的原因是,我们将一个 string 类型的值反射成一个 Int 类型的值,直接在 反射包里面就给我们报了 panic。

到此,关于“Go中interface{}的注意事项是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

域名注册
购买VPS主机

您或许对下面这些文章有兴趣:                    本月吐槽辛苦排行榜

看贴要回贴有N种理由!看帖不回贴的后果你懂得的!


评论内容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索栏

各类专题梳理

网站导航栏

X
返回顶部