登录
首页 >  Golang >  Go问答

go中的一个接口转换类型

来源:SegmentFault

时间:2023-01-09 18:13:51 322浏览 收藏

本篇文章给大家分享《go中的一个接口转换类型》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

下面这个语句是让inter接口转换成Person类型

inter.(&Person) 

有什么方法用一个变量存Person然后转换?

类似下面这样?

a := Person  
inter.(&a)

正确答案

首先我们明确下问题: Inter接口和Person类型相互转换?
Inter接口转结构体和指针,&Person根本就不一个类型,我猜测是想转指针类型,接口转换成具体类型就要使用go的断言类型转换
Inter接口转Person:

var i Inter
i.(Person)

Inter接口转Person指针:

var i Inter
i.(*Person)

那么反过来转换Person结构体或*Person指针转Inter接口:

var p Person
var i Inter
i = p
i = &p

为什么转Inter接口直接赋值就好了?
因为你写的代码在编译时就会类型检测,检测是否实现了接口否在编辑器就报错了,实现了变量接口就直接隐式类型转换了。

可以参考我的另外一篇讲类型转换的文章:golang中的四种类型转换总结


我感觉主要问题是不熟悉断言,断言的格式是:

新类型变量 := 变量.(静态类型)
新类型变量, ok := 变量.(静态类型)

静态类型哪里就不能写变量只能是一个类型,新类型变量就转换类型后的变量,建议多看看断言example。

今天关于《go中的一个接口转换类型》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表