面向对象之结构体1我是一只忙碌的小青蛙

1)Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。

2)Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。

3)Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。

4)Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现。

5)Golang面向对象(OOP)很优雅,OOP本身就是语言类型系统(typesystem)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。后面会充分体会到这个特点。也就是说在Goalng中面向接口编程是非常重要的特性。

看一个养猫猫问题:

张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。还有一只叫小花,今年100岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示张老太没有这只猫猫。

使用现有技术解决:

1)单独的定义变量解决

funcmain(){

//1.使用变量的处理varcat1Namestring="小白"varcat1Ageint=3varcat1Colorstring="白色"

varcat2Namestring="小花"varcat1Ageint=100varcat1Colorstring="花色"}

2)使用数组解决

//2.使用数组解决varcatNames[2]string=[..]string{"小白","小花"}varcatAges[2]int=[..]int{3,100}varcatColers[2]string=[..]string{"白色","花色"}}

现有技术结局的缺点分析:

1)使用变量或者数组来解决养猫的问题,都不利于数据的管理和维护。因为名字,年龄,颜色都是属于一只猫,但是这里是分开保存。

2)如果我们希望对一只猫的属性(名字、年龄、颜色)进行操作(绑定方法)也不好处理。

3)引出我么要讲解的技术==》结构体

结构体与结构体变量(实例/对象)的关系示意图:

对上图说明:

1)将一类事物的特征提取出来(比如猫类),形成一个新的数据类型,就是一个结构体。

2)通过这个结构体,我们可以创建多个变量(实例/对象)

3)事物可以是猫类,也可以是Person,Fish或是某个工具类。。。

快速入门-面向对象的方式(struct)解决养猫问题

packagemainimport("fmt")

//定义一个Cat结构体,将Cat的各个字段/属性信息,放入到Cat结构体进行管理typeCatstruct{NamestringAgeintColorstringHobbystring}

//张老太养了两只猫猫:一只名字叫小白,今年3岁,白色。//还有一只叫小花,今年100岁,花色。//请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,//年龄,颜色。如果用户输入的小猫名错误,//则显示张老太没有这只猫猫。

//使用struct来完成案例//创建一个Cat的变量

varcat1Cat//varaintcat1.Name="小白"cat1.Age=3cat1.Color="白色"cat1.Hobby="吃鱼"fmt.Println("cat1=",cat1)

fmt.Println("猫猫的信息如下:")fmt.Println("name=",cat1.Name)fmt.Println("age=",cat1.Age)fmt.Println("color=",cat1.Color)fmt.Println("hobby=",cat1.Hobby)}

结构体和结构体变量(实例)的区别和联系:

通过前面的案例和讲解我们可以看出:

1)结构体是自定义的数据类型,代表一类事物

2)结构体变量(实例)是具体的,实际的,代表一个具体变量

结构体变量(实例)在内存中的布局:

type结构体名称struct{field1typefield2type}

举例:

typeStudentstruct{NamestringAgeintScorefloat32}

‘字段/属性

基本介绍:

1)从概念或叫法上看:结构体字段=属性=field(即授课中,统一叫字段)

2)字段是结构体的一个组成部分,一般是基本数据类型、数组,也可以是引用类型。比如我们前面定义猫结构体的Namestring就是属性

注意事项和细节说明:

2)字段的类型可以为:基本类型、数组或引用类型

3)在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值),规则同前面讲的一样:

案例演示:

//如果结构体的字段类型是:指针,slice,和map的零值都是nil,即还没有分配空间//如果需要使用这样的字段,需要先make,才能使用。

typePersonstruct{NamestringAgeintScores[5]float64ptr*int//指针slice[]int//切片map1map[string]string//切片}

//定义一个结构体变量varp1Personfmt.Println(p1)ifp1.ptr==nil{fmt.Println("ok1")}ifp1.slice==nil{fmt.Println("ok2")}ifp1.map1==nil{fmt.Println("ok3")}

//使用slice,再次说明,一定要makep1.slice=make([]int,10)p1.slice[0]=100

//使用map,也一定要先makep1.map1=make(map[string]string)p1.map1["key1"]="tom"fmt.Println(p1)}

4)不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个。

typeMonsterstruct{NamestringAgeint}

varmonster1Monstermonster1.Name="牛魔王"monster1.Age=500

monster2:=monster1//结构体是值类型,默认为值拷贝monster2.Name="青牛精"

fmt.Println("monster1=",monster1)fmt.Println("monster2=",monster2)}

THE END
1.每日冷知识你知道为什么猫总是能优雅地落地吗?这种能力被称为“翻正反射”,是猫科动物的标志性本领。当猫从高处掉落时,它会迅速调整身体,确保脚先着地。这一动作依赖于猫灵敏的前庭系统和灵活的骨骼结构。 猫的前庭系统位于内耳中,可以感知身体的方向和重力。当猫感受到失去平衡时,前庭系统会向大脑发送信号,帮助它快速判断方...https://www.jianshu.com/p/1ac8de729c88
2.猫结构素材猫结构图片元素觅元素是设计素材的免费下载网站,提供猫结构素材,猫结构图片,猫结构免抠素材设计元素,猫结构png图片透明背景等素材免费下载。https://www.51yuansu.com/tupian/2854732.html
3.猫咪结构ZoraHao猫咪结构 zora_hao 关注 可能感兴趣的人 下次默认收起 相辉先生 北京 |设计爱好者 创作 2 粉丝 7961 关注 大庆daqing 南乔治亚和南桑德威奇群岛 |设计爱好者 创作 9 粉丝 17131 关注 lizer_泽 成都 |设计爱好者 创作 37 粉丝 5596 关注 krkvision 成都 |设计爱好者 创作 16 粉丝 3996 关注 东京未明 上海 ...https://www.zcool.com.cn/work/ZNDQ1MzQ4OTY=.html
4.鸢尾的侧面结构展示,其实别盲目追求90度鼻...来自Marzipan德文...鸢尾的侧面结构展示,其实别盲目追求90度鼻断,一只猫结构跑偏,有个90度鼻断完全无法逆转趋势,因为整体脸版狭长(而非宽扁脸),看着还是像无毛;因为缺乏颧骨,整张脸光溜溜一马平川,成年了像小田园猫;因为鼻子长,一低头秒变狐狸,不能接受360度的任意拍摄,非常挑角度,结构不好的德文可是仰头、低头,判若两猫. 当然...https://weibo.com/5994928156/K4xlNguKu
5.微博正文此处,仅以CFA 2021—2022赛季1—9区成猫NW头衔布偶猫(来自美国DOLL VILLA猫舍的海山双公猫) 为例解析,CFA标准下优秀的布偶猫结构。 1 耳朵:第一、带有柔和弧度的耳尖。第二、双耳基与脸颊,双耳尖到鼻尖,分别形成和谐的相对位置,趋近正三角形。第三、耳基宽窄适中,两耳基线与额顶线是平行关系。第四、耳朵...https://m.weibo.cn/status/LAHdfDXmL
1.猫咪品种鉴赏揭秘它们如何辨别不同血统的特征体型与骨架结构 猫咪通过观察体型和骨架结构来识别其品种,这通常包括头部、身体比例以及肢体的长度和粗细。例如,长毛品种如波斯猫通常拥有较为圆润的身体和短而强壮的四肢,而运动型品种如奥地利维也纳猎犬则拥有一身精致且灵活的手脚。 头部特征 头部是猫咪区分各自血统的一个重要标志。每个品种都有其独特的脸型、鼻梁高...https://www.stddjzkkll.cn/zi-xun/480614.html
2.猫的品种与特点探究猫是属于哺乳纲食肉目、家猫科(Felidae)的一属动物。其最著名的成员莫过于家猫(Felis catus),但在这个科中还有一些其他的小型狩猎者,如豹子、云豹和野生小型狮子。这些不同的物种都有着独特的身体结构和行为习性,这些差异主要反映了它们适应不同栖息地和捕猎策略。 https://www.gurotsr.cn/chong-wu-zi-xun/9482.html
3.猫咪品种鉴定指南揭秘您的宠物是哪一类这一品种通常拥有宽阔平坦的心脏形状,以及深邃饱满的大眼睛和略微向上弯曲的小耳朵。它们的地面行走平稳自信,有着结实耐用的身体结构和稍微突出的前腿,这也是该品系的一个重要识别标准。如果您注意到您养的是一种既能轻松适应室内生活又能在户外自由活动的人文主义者,那么这或许就是英国狮子狗。https://www.tepnz.com/wen-da/74878.html
4.猫咪的多样性探究一种分类系统及其视觉资料集为了更好地理解和记录猫咪种类,我们需要建立一个科学而有序的分类体系。这通常基于遗传学原理,将猫按照它们之间遗传关系的紧密程度进行分组。在现代生物学中,最常用的分类方法是根据基因差异来划分物种,而对于家喵喵来说,这意味着我们可以将其与野生祖先相比,以及与其他品种进行比较。 https://www.tr0dmu0cp.cn/pin-zhong/488638.html
5.猫咪品种辨识揭秘我们的宠物朋友们的遗传密码在我们日常生活中,猫咪不仅仅是一只可爱的小动物,它们还拥有各自独特的外观特征和性格特点,这些都可以通过猫咪品种识别来了解。以下是几个不同类型的猫咪及其主要特征。 斯芬克斯(Sphynx) 斯芬克斯是一种没有毛发的短毛猫,但它们并不是因为缺乏毛发而显得生疏。相反,他们有着一种特殊的魅力。斯芬克斯通常具有温暖、友好...https://www.topno.cn/pin-zhong/533947.html
6.猫好奇结构树库存图片.图片包括有逗人喜爱,眼睛,大麦,宠物...猫好奇结构树 照片 关于 逗人喜爱, 眼睛, 大麦, 宠物, 全部赌注, 镀层, 毛皮, 结构树, 注意, 作用, 相当, 上升, 挑战, 本质, 吓唬, 绿色, 惊吓, 凝视, 敬慕, 猎人, 好奇, 敌意, 似猫, 小猫, 国内, 两足动物, 查找, 灰色, 野生生物, 蓬松, 搜索 - 20349137https://cn.dreamstime.com/%E5%85%8D%E7%89%88%E7%A8%8E%E5%9B%BE%E5%BA%93%E6%91%84%E5%BD%B1-%E7%8C%AB%E5%A5%BD%E5%A5%87%E7%BB%93%E6%9E%84%E6%A0%91-image20349137
7.Golang笔记——结构体golang结构体将一类事物的特性提取出来(比如猫类), 形成一个新的数据类型, 就是一个结构体。 通过这个结构体,我们可以创建多个变量(实例/对象) 事物可以猫类,也可以是 Person , Fish 或是某个工具类。。。 快速入门-面向对象的方式(struct)解决养猫问题 代码演示 ...https://blog.csdn.net/weixin_44023658/article/details/107778626