前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Go】面向对象重难点总结

【Go】面向对象重难点总结

作者头像
Regan Yue
发布2021-09-16 11:26:04
3330
发布2021-09-16 11:26:04
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog
  • func(p *Person) Eat(){…} 使用指针和值都可以调用,尽量使用指针。
  • 无论使用值还是指针做主语,去访问属性和方法,其功能是一致的;
  • 定义方法时,方法的主语尽量使用指针,一方面是模仿SDK,一方面是最大程度地减少值传递的拷贝效应的负面影响。
  • 做主语时,使用值或者指针时效果一致,但!做参数时,一个是拷贝式值传递,一个是地址引用传递;
  • 对象做参数时,值传递是拷贝式的;引用传递(指针传递、地址传递)才是传递真身;
  • 在整个OOP的世界里面,值能做的,指针都能做。反之不成立。
  • 创建对象的方式一共四种 ①:创建空白对象 Person{} ②:创建对象时,有选择地给指定属性赋值:Person{Age:20,Name:“张三”} ③:创建对象时,完整有序的给所有属性赋值:p := Person(“张三”,20,true,[]string{“撸代码”,“完美的撸代码”}) ④:通过内建函数创建对象指针 pPtr := new(Person)
  • new(Type)*Type用于构建结构体的实例指针,参数是结构体的名字,返回的是【所有属性都为默认值的对象】的指针
  • 大牛逼货的命名能够深度的望文生义 例如:personPtr能够知道它是一个Person对象的指针而非实例
  • 类型名称大写开头,外部包可以创建它的对象,反之则不能;
  • 属性名和方法名大写开头,外部包可以通过实例或指针进行访问,反之则不能;
  • 对接口的实现,语法上一定要严格区分到底是实例实现了接口还是指针实现了接口;
  • 对接口实例(worker)的类型断言,只能断言为实例或指针中的一种,具体取决于【到底是实例实现了接口还是指针实现了接口】
  • Worker是接口,workers := make([]Worker,0)能把实例a丢入workers,意味着a必须是实现了Worker接口的子类实例或指针;
  • 只要a是接口Worker的实例,就可以workers:=append(workers,a) 也可以:var worker = a.
  • 如果指针实现了接口,那么只有指针对象才是接口实例;
  • 接口实例只认指针。
  • 不管实现接口方法的主语是指针还是值!类型断言也只能断言为指针!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档