00:00
前面呢,我们给大家介绍了一下go浪面向对象编程的一些特点,对不对,同时呢,也引出我们这个结构体了,那现在我们就来看一下在go浪里面这个结构体到底它是一个怎么样的东西,我们来看一看。我举了一个例子,大家看啊,结构体和结构体变量。或者我们叫做实例或者叫对象的一个关系示意图,就说结构体变量呢,有些程序员喜欢直接把它叫实例或者叫对象都可以都可以,那么它是一个什么样的关系呢?它是这么一个关系。比如说我们这有个猫猫,那这个猫有很多种类,比如说波斯猫,花猫。还有这个中华田园猫对不对,各种各样的猫,那么这些猫呢,总会有相同的特征,你比如说诶,这些特征有哪些呢?我们姑且把它叫做字段。或者呢,把它叫做属性理解,那么我们认为这个猫呢,总会有相,不管什么猫,总会有相同的字段,比如说名字。
01:08
对吧,比如说年龄。比如说颜色等等这些呢,就是它的字段和属性,我可以把它提取出来。同时呢,我们认为这个猫呢,总会有相同的行为,它会有一些行为,这个行为呢,体现出来就是后面我们要讲的方法。但现在我们先不说对吧,比如说猫都会觉,猫都会吃东西,猫都会睡觉,猫都会做算术题等等等等,那么这个时候呢,就可以给这个猫绑定一些行为,或者叫绑定一些方法。所以说我们可以看到,当我们把这些信息提取出来的时候呢,放到一个数据结构里面,放到一个数据类型里面呢,我们就把这个数据类型叫做结构体,而这个结构体呢,就是cat结构体,能理解吧,那么当我们有了这个结构体过后呢,我们可以通过这个结构体,这个数据类型来创建多个实例。
02:08
或者叫做多个变量。怎么理解呢?就说这个地方,就是同学们看到这个呢,它是一种数据类型,而这个数据类型怎么来的呢?就是我通过抽取它相同的特征和行为形成的一种数据结构,那么这种呃数据数据类型,那么这个数据类型呢?通过这个数据类型我可以创建很多的实例或者叫变量,你比如说int是不是一种数据类型呢?是吧,但是这个int是不是可以有很多变量,我可以写个a int b也是一个int,可以吧,那这个也是同样的道理,那么K结构体是一种数据类型,我当然可以创建多个K了,对吧,我可能是。小小黄猫,小花猫、小白猫等等等等,所以大家看到这个关系是什么来的吧,提取形成一个数据数据类型,这个叫结构体,然后通过这个数据类型创建各个变量。
03:07
这就是他的一种关系,那么在我把这个讲完了过后呢,我们来把这个对上图再做一个说明来吧。先把这块整理一下。这是我们的第三点,没问题吧,我把他的关系示意图给同学们拿过来,然后呢,我对刚才这个图做些说明和总结,注意听讲。好的来对上图对。对上图的一个说明。我们把它说明一下,加深大家对它的认识。好的,我们看第一点。第一点。首先我们可以看到,就是我们在做一个结构体的时候呢,往往是把一一类事物。把一类事物的特征提取出来。就是将。
04:02
将一类。一类事物。一类事物。这个事物啊,事物的特征。提取出来。提取出,提取出来,提取出来。啊。啊,比如说比如说上面这个猫猫对吧,比如说这个猫,比如猫。哎,比如这个猫猫类。对吧,这个猫类它就有很多公理的属性嘛,名字啊,年龄呢,颜色对不对,提取出来干什么呢?形成一个或者叫创建,呃,声明成一个都可以啊,就形成吧,形成一个新的数据类型。那么这个数据类型呢,我们把它叫做结构体啊,就是这个数据类型呢。把这些,把这些特征提取出来,形成一个新的数据结构,就是把这些特征放到一个结构里,结构放到一个数据类型里面去啊,就是一个什么呢?就是一个结构体。
05:09
结构体,OK,这是第一点,那么通过这个结构体呢,我们可以创建多个变量。啊,通过这个结构体。结构体,我们可以创建多个变量,这个变量呢,有些程序员直接就把它叫做实例,或者呢,干脆就叫对象也可以。没有什么大的问题,第三点,我们要说的这个猫类,既然是猫类,当然也可能是人类,也可能是鱼类,也可能是一个工具类,对不对?在室内事物很多嘛啊。除了也可以啊,这这个一类事物,事物可以是猫类。猫类也可以是是吧,Person类,Person人或者是fish。对吧,或者是什么呢?或者是工具类,或者是某个工具类单。
06:06
这个是可以扩展的,比如说我这画的图人鱼对不对,好,这个就是一种。它是这个结构体和结构体是变量,它的一种关系,其实就是通过这个结构体数据类型呢,可以创建多个变量,就这么简单一个关系,好这个说完了过后呢,我们再来看,我这又有个图,对吧,把猫的特征提取出来,形成一个猫的结构体变量,我可以把人的特征提取出来,成一个person的结构体,然后通过这个结构体呢,也可以创建实例,就说这个一类事物到底是哪一类事物,要根据你的编程不同。编程的需求不同来定,既可以是猫,也可以是别的了解。好了,还有一点说明,就是上图的说明,从猫结构体到变量呢,创建一个变量呢,我们可以说创建了一个cat结构体变量。也可以说定义了一个K结构体变量都可以。
07:02
这个叫法都一样,有些说是创建,有些说是定义都行。还有一点,上面的猫可以是鱼,狗,人等等,对吧,这个我就不说了,不多说了,我把这块呢也给同学们放到笔记里面来。没没问题吧,这个不难哈,我把它呢整理到我们这块来。好,做一个简单的说明,那既然现在我们对这个结构体有一定的认识了,那现在呢,我们就来一个快速入门案例,用面向对象的方式,或者说在这里使用我们的structure。来解决养猫问题。这时你突然发现,诶,如果用结构体这种方式来解决养猫的问题,突然变得简单而且高效了。确实如此啊,同学们,来吧,我们来体验一下,用结构体来完成上面养猫的问题,是不是变得简单而且比较清晰了呢?来跟上老师思路。
08:02
好,那现在呢,我们来一个标题三。我们来一个标题三,跟上老师思路啊,来吧。开始写代码了,直接上代码啊,代码演示。OK,没问题吧?它也比较简单,诶怎么变成这个玩意儿了。代码演示来。打开我们的这一个Vs code,现在呢,我们既不用这个变量,也不用这个数组,我现在要用结构体了,来先把这块给我注销掉,开写。现在我们使用。使用ru的这个结合structure。结构体来完成什么呢?这个案例。好,跟着老师思路,刚才我们讲到了一只猫猫,它有名字,有年龄,还有颜色,这些是不是都都是它的属性呢?或者是它的字段,对不对,我们叫字段,那开始就这样子先定义。
09:06
一个cat结构体。结构体将将猫的将K的各个字段,字段信息,呃,有些人喜欢把字段叫做属性都可以,好吧,这叫法呢,有些叫字段,有些叫属性都没问题,我后面呢,统一可能就叫字段了,能理解吧。啊,放到放入到哪里去呢?放入到K结构体进行管理。结构体进行管理。进进行管理对吧,好来了啊type猫猫。来了,那第一个呢,我们说它有名字,好,首先给它来一个字段叫名字,当然类型是是准的,它还有一个年龄对不对,年龄呢,我们用H是个int类型的,那大家看到我字段名是用大写开头,说明什么,说明将来这个字段它是可以公开的。
10:06
对不对?能理解吗?我这为什么写大写是可以公开的,然后呢,还有它有一个color,是时准写完了,大家看此时此刻你是不是突然发现我们有一种数据类型,可以把它的字段统一进行管理,而不再是分散的了。是不是你刚才那个单独的变量还有数组必须要分散,但是我把这一个猫的所有属性放在一个structure里面管理是不是更方便了?好,下面呢,我们来接着看它不是有。有一只猫叫小花吗?那好,我们先创建。创建一个K的变量,K是个结构体,那我怎么来创建呢?非常的简单,非常简单,这样写就可以了。第一只猫。对不对,等于什么呀,没问题,咱们直接。把这个拿过来就可以了。咱们直接给他一个这样的数据类型,比如说定义。
11:03
完事。看到没有,这样就写完了。这这就写完了。就是这个猫猫CAT1,它是个什么类型,就是cat,你看这个其实是不是特别像以前写的,比如说at呀,只是你这个变量名叫A,它叫K1,你的类型是一个结构体,它是一个什么?是一个int。对不对,实际上这个int呀,到后面你会发现它也可以绑定自己的方法。所以我们为什么讲勾浪语言,它是那个,呃,它它的这个面向对象呢,它是一种天然的明白吧,后面还会体现出特点,大家看这好,有了这个过后呢,就可以用了,注意当我们定义这个猫过后呢,其实同学们注意看到,其实这个猫它的它的这些字段也就分配了,因为它是直类型。它是直类型,你们不相信的话呢,可以打印出来看一下。给大家看一下啊,Print l k1,我们先来看看此时此刻这个K1里面它的各个字段是否已经有信息了。
12:05
来,走一个。好,我们来CD,哎,我现在还是在这是吧,Go。让命跑起来,我们可以看到此时此刻你们注意观察,诶是不是有个零呢?那有些同学老师,诶不对啊,你不是有三个属性吗?是的,我确实是有三个属性,但是第一个属性其实是一个空的字符串,默认值吗?字符串是不是不给值,默认是个空串了,所以你看不到。但这个零是不是就是那个年龄的默认值?也就是说什么意思呢?当我们去声明或者叫创建一个结构体变量时,其实它的空间就已然分配了,只是因为你没有给值,没有给它每一个字段赋值,因此默认这个为空串,就这个。而这个呢,为默认为零,而这个呢,也默认它能理解吧。它是直类型啊,后面我们还会讲细节啊,不是不要着急,好,但是我我肯定不希望,呃,它是默认值,我要给它赋值来第一只猫猫,它的名字是不是这样就赋值了,它赋值的方式很简单,就是这一个变量的名称点。
13:19
它的字段名就可以了,不是它这个是一只猫吗?这个猫的其中有一个字段叫name,叫什么名字啊,叫小白。小白完事,然后呢,他还有一个年龄,年龄是多少岁,三岁写完K1,他还有个color color是什么呢,白色。希文。同学们再再看一下啊,当我们在执行的时候,你会看到效果已然出来了,通过通过看,诶同学们看是不是已经出东西了呀。第一个字段。第二个、第三个都出来了,而且同学们有发现啊,这个时候管理也非常方便,如果我们我们想去输出一个猫的信息,只要知道这个结构体的名称,其他的就按照它的字段名来访问就行了。来,我们走一个,你是不是突然发现比前面要好很多了?
14:13
是不是很好管理啊?我们说一下猫猫的信息如下。怎么个如下法呢,输出来吗,找一个。好,我们说它的名字等于点K一点。取出来了。其他的信息以此类推。他的年龄。等于H。对不对,然后呢,它还有什么呢,它的颜色。颜色这块我们直接用color来取。看,写完了,好,同学们看,此时此刻我们一输出,诶,信息就非常清晰了,看这。大家看这里。是不是很方便?是不是很方便,因为我们突然发现这种数据就是这个结构体啊,它有一个特别好的地方,什么地方呢?就是它通过这一个结构体,可以把这个猫的所有的信息怎么样统一管理。
15:13
那当然很方便了嘛。你你这个时候肯定很方便,假设我们要增加一个字段,比如说我们说这个猫猫,还有一个什么呢?它的它喜欢吃的食物,比如说hobby。对吧,我还可以加一个加进去就完了,那这个地方你你你你就是不给他复制他也不错,只是它默认是个空嘛,那可以加一个hob,比这个猫猫的他的爱好。他的爱好是什么呢?诶,他的爱好是吃鱼。吃。啊,他爱好是吃鱼。吃鱼对不对,吃鱼诶怎么吃的这玩意儿。啊,那那就这样子吧,那词语不是挺好吗?这是个这是一个图图形的图形,图形的语对吧,那可以,你看我一直行,同学们看效果,同学们看效果非常有意思,你看。
16:02
诶。这个鱼有鱼没有输出来对不对。他喜欢吃的食物啊,Hobby打印出来HH。Ho d。然后呢,这块地方把它的hobby取出来。Ho by,来吧,跑一个。走起来。走起来,诶,这边是哪里出了问题。饭。哦,这种我小写了,那我把它改成大写啊。改成大写,当然因为它是区分大小写的,这块呢,我必然也会把它改一下,对吧,你不改的话肯定是要出问题的。好,我都把它改成大写吧,跑下。我们可以看到此时此刻,诶吃的是鱼好,完事是不是很方便,而且不但可以这样做,还有一个好处,现在还不能讲,就是什么呢,它不但可以给这个猫把属性统一管理,而且还可以给这个猫绑定方法,比如说我们这个小猫通过学习可以做算术题,还可以给这个类型绑定它的方法,当然绑定方法除了给这个结构体绑定,给基本数据类型也可以绑定,对不对?后面我们还会说这个事情,总而言之呢,这种方式肯定是特别利于我们去管理一些。
17:21
数据或者字段比较多的这种事物是吧?对编程来说肯定是一件特别好的好的事情,好同学们,那么快速入门呢,我们就说到这里,大家通过这个快速入门是不是多少能够体验到这个structure来解决养猫问题的好处了,对不对?原先的问题是不是都解决了?数据不好管理,不好维护,我们解决了,而且还可以给他绑定方法也可以。是不是好同学们,那现在呢,我把这一块呢给同学们。整理到笔记里边去,好吧,它的核心代码就这么两部分,一个。就是定义结构体。
18:00
没问题吧?一个就是定义结构体。第二个呢?第二个。对不对。一个是定义结构体,第二个呢就是什么呢?就是怎么去调用或者使用这个结构体的,来看一下代码。是不是在这里?我也把它给大家整理一下。从这里开始。保存到笔记中去。没问题吧?好,我把它整理一下。好,没问题,是不是OK,那这就是我们面向对象编程的一个,呃,关于结构体的一个介绍,也算是一个入门吧,也算是一个入门,大家先体验一下,好,那关于这块快速入门案例,我们就先给大家介绍到这里。
我来说两句