Regan Yue
【Go】面向对象重难点总结
关注作者
前往小程序,Get
更优
阅读体验!
立即前往
腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
Regan Yue
首页
学习
活动
专区
工具
TVP
最新优惠活动
返回腾讯云官网
社区首页
>
专栏
>
【Go】面向对象重难点总结
【Go】面向对象重难点总结
Regan Yue
关注
发布于 2021-09-16 11:26:04
333
0
发布于 2021-09-16 11:26:04
举报
文章被收录于专栏:
ReganYue's Blog
ReganYue'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
删除
前往查看
oop
string
var
worker
指针
本文分享自
作者个人站点/博客
前往查看
如有侵权,请联系
cloudcommunity@tencent.com
删除。
本文参与
腾讯云自媒体分享计划
,欢迎热爱写作的你一起参与!
oop
string
var
worker
指针
评论
登录
后参与评论
0 条评论
热度
最新
推荐阅读
LV.
关注
文章
0
获赞
0
领券
问题归档
专栏文章
快讯文章归档
关键词归档
开发者手册归档
开发者手册 Section 归档
0
0
0
推荐