当前位置: 首页 > news >正文

石家庄网站托管公司免费 企业网站管理系统

石家庄网站托管公司,免费 企业网站管理系统,推荐设计感强的网站,在线视频下载网站如何做我们一起来回顾一下上一次说到的 interface{} 可以用来做多态 接口类型分为空接口类型和非空接口类型,他们的底层数据结构不太一样 这里顺便说一下,用来作态需要满足这样的条件: 首先得有父类指针指向子类的对象这个接口还必须是非空接口…

我们一起来回顾一下上一次说到的 interface{}

  • 可以用来做多态

  • 接口类型分为空接口类型和非空接口类型,他们的底层数据结构不太一样

这里顺便说一下,用来作态需要满足这样的条件:

  • 首先得有父类指针指向子类的对象
  • 这个接口还必须是非空接口,里面得包含方法,也就是使用的底层数据结构是 iface
  • 子类会去实现父类的具体方法

interface{} 注意断言

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

type Animal interface{}func main() {var a Animal = "xiaomotong"v, ok := a.(string)if !ok{fmt.Println("type error")}fmt.Println("v == ",v)
}

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

切忌没头脑的强转

func main() {var a Animal = "xiaomotong"v := a.(int)fmt.Println("v == ",v)
}

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

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

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

当然我们也可以这样写

type Animal interface{}func main() {var a Animal = "xiaomotong"switch a.(type) {case string:fmt.Println("a type is string")case int:fmt.Println("a type is int")}}

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

用于反射的注意点

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

举个小例子:

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

type Animal interface{}func main() {var a Animal = "xiaomotong"v := reflect.ValueOf(a)fmt.Printf("v type == ", v.Type(), " v == ", v.String())
}

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

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

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

type Animal interface{}func main() {var a Animal = "xiaomotong"v := reflect.ValueOf(a)fmt.Printf("v type == ", v.Type(), " v == ", v.Int())
}

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

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

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

小知识,大挑战,简单的写 2 个注意事项,给 xdm 提个醒

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

http://www.yayakq.cn/news/532556/

相关文章:

  • 购物网站用户管理卖老石器老榆木做哪个网站好
  • 软文营销的五个特点做网站怎么优化
  • 站酷网官网入口靖江市属于哪里有做网站的
  • 帮别人做网站 别人违法徐州建设安全监督网站
  • 中国制造网官方网站入口南充网站建设hulingwl
  • 种子网站开发网站快速排名技术
  • 免费网站建设推广企业作风建设心得体会
  • 屏幕分辨率 网站开发台州地区网站建设
  • 国内优秀的网站三门峡做网站推广
  • 海口模板网站建站网店logo设计
  • 网站改版规则企业网络架构图
  • 网站优化公司大家好亚马逊企业网站建设
  • 淘宝客网站如何做造价咨询公司加盟分公司
  • 重庆荣昌网站建设建设通官网app下载
  • 广源建设集团有限公司网站青岛的互联网公司有哪些
  • 潍坊建网站小说网站怎么建设
  • 网站开发教程视频ifront做原型控件的网站
  • 中科建建设发展有限公司网站如何获取网站根目录链接
  • 网站建设合同属于购销吗杭州优化建筑设计
  • 天猫优惠券网站怎么做天猫购物商城官网
  • 专业的开发网站建设价格手机网站按那个尺寸做
  • 怎么做公司的中英文网站server 2012 做网站
  • 网站建设管理制度实施方案中职网络营销专业
  • 泉州建设系统培训中心网站2017做那个网站能致富
  • 网站只有一个首页单页面怎么做排名wordpress 登录注册
  • 哪个网站做h5比较好wordpress自定义图片
  • 做公司网站有什么需要注意的法学网站阵地建设
  • 自己做个网站的流程牛皮纸 东莞网站建设
  • 猫眼网站建设中卫市住房建设局网站
  • 网站开发微信公众号自定义菜单做seo对网站推广有什么作用