00:00
下面我们来完成客户信息管理系统的第二个功能就是显示,完成显示客户列表的功能,好,我们来一起完成一下。好一边呢,做一边咱们做笔记好吧。好,这是给他来一个标题二。没问题吧?那首先呢,我们还是老规矩,先把这个功能进行一个说明,这个功能说明。对不对,就说这个功能到底完成一个什么样的功能,第二个呢,就是我们所说的思路分析。第三一个呢,就是代码实现。我们先来看功能说明,这个功能说明呢,我把这个图片拿过来一看就知道了,就说当我们输入要显示客户列表的时候呢,能够展现出这个客户列表所有客户列表信息,比如说编号。对吧,姓名就是他的姓名是什么,他的年龄是什么,都把它展现出来,这个呢就是功能的一个具体说明,对吧,他要完成这个功能,就是这这个功能好我们把把打开。
01:08
好,这是要完成这个功能说明,那思路分析呢,我们来考虑一下。还是打开这个图吧,既然你要完成这个功能,大家想一想,是不是在这个service里面,我们要去写一个方法。是不是我们要学一个历史的方法,能够把这个客户所有的信息给显示出来,第二个呢,我们在V里面呢,也要去用一个历史的方法来调用它。也就是说。也就是说各位同学听我说这个思路啊。在这里面呢,我们要去编写显示啊,显示客户列表。客户列表呢,我们要编写一个方法。编写一个方法。那么这个方法呢?我们姑且就叫历史的方法。
02:02
对吧,干什么呢,他要返回。返回客户信息,客户那个信息,呃,那这个信息其实。信息啊,信息其实就是切片。就是这个切片。因为我们把所有的客户信息都是放在切片里面的,对吧,那同样的道理了,同学们。那你这个地方。在我们的这个customer view里面,是不是也应该编写一个方法来调用这个历史的方法,对不对?好,这里面呢,也是一样的要编写。要编写,编写一个方法叫list,可以干什么呢?去调用。去调用这个customer。Customer view。Customer service。Server serve的哪个方法?历史的方法?
03:05
啊,并显示。并并。显示这个客户列表。那也就是说这个里面有个历历史的方法去调用这个customer service里面的方法。那现在呢,我们必须要做这样一些事情,就是你这个customer service呢,呃,就说就说你这个地方就是customer view里面呢,包含一个customer service的字段。那只有有有了这个字段过后呢,才能去调里面的方法对不对,那所以说在这个customer service里面里面呢,我们还要编写一个方法。编写什么方法呢,就是六。一个customer service的方法返回。ERVC啊,返回一个什么呢?返回一个这样的实例。能理解我的意思吗?
04:01
他要返回这样一个实例。对吧,他要返回这样一个实例,那它只有返回这个实例过后呢,我们才能去调用它的这个方法。对吧,因为你我在这去,我在这里面有个属性嘛,有个属性我我拿到这个,我拿到你这个返回的customer service,再再去调这个方法就可以了。好,思路我们就分析到这里了,思路主要就在这里。思路的分析。就在这个位置。一个是他。对吧,一个是这。好,现在有了这个思路,我们来把它走一下。好代码实现。那首先呢,我们先在这个,呃,Service里面,我们先去写一个方法。好吧,跟上思路。编写一个方法可以返回一个customer service,对不对?Customer service,那么我们返回一个什么样的实例呢?返回一个指针类型的还是返回一个其他什么类型?
05:09
我们就返回一个指针类型没问题吧。返回一个指针类型,这个没问题,好,现在呢,我们就来开始做这个工作。就是fun。啊,Function。好。好,我们来把这个方法给写一下啊,This。行。Customer service对吧。呃,六一个啊,咱们应该是六。六。一个customer service对吧,返回的是这么一个指针类型。这个没问题吧,然后呢,我们怎么返回它呢。要返回它的话,我们,嗯,这里面是不是它还有两个属性呢,我们为了能够好看呢,我们来初始化一把啊,就是初始化一把,就是为了能够。
06:01
能够,呃,看到有客户在。在这个切片中。切片中我们呃,初始化,一个初始化。初始化一个客户。能理解我的意思吧,好,这个就比较简单了,那首先呢,我把这个呃,This,他要呃,我们我们先创建一个再说吧,就是。我们创建一个这样的对对象啊,比如说有customer。Customer service。对于。啊。早。把他给说化了。没问题吧,好初始化,那初始化的时候呢,我们把这个变量。我们先把它放到这儿,放到这儿,然后呢,第一个变量。点他的customer number,先默认给他一个一,这个没问题吧,然后呢,我们再给他这个切片里面加一个客户啊加一个客户,那加一个客户的话呢,我首先要创建一个客户,才能把这个客户加进去,对不对?好所以说我先创建一个初始化客户客户卡。
07:11
对不对。Customer等于那在这个我们写的这个customer里面,是不是已经有了,有有了这个六这个六一个customer这个方法呀,是不是好,所以说我就直接来给他一个,呃,那么我就初始化了ID。我就直接写吧,我就不一个个的给了。ID为一。ID为一,然后他的名字呢,我们就给他一个名字叫张三。好吧。张三。好,我们再来看下一个字段,是性别、年龄。性别和年龄对吧,性别我们认为是男的。年龄,比如说是20,然后呢,再下面两个属性,一个是电话号码,一个是电子邮件,好的,那电话号码呢,它是个字符串,比如说112。
08:06
好,嗯,他的邮件也给他一个,比如叫张三搜狐点com写完了。那大家想一想,你现在有了一个初始化的一个客户,你得把这个客户加到这个切片里面去。怎么加进去?很简单,用append就可以搞定了,能理解吗?Openend?点。他的customers。等于open,大家还记不记得切片的操作?还记得吧,就是在这个切片里面,我们加了一个customer进去。这大家能看懂吗?这句话人看不懂,就是给这个切片里面加了一个customer,再传给这个customer,那就相当于说在这个切片里面增加了一个客户,最后我把它返回。大家能看懂啊,这段代码如果看不懂的同学,好好的再想一想好不好,这这个应该是在前面,我们把基础这一部分已经讲过了。
09:06
好,就拿到了一个new customer,那么你除了溜了一个customer之外呢,你还得有一个方法,什么方法?就是你要在这个里面再加一个list的方法。因为别人到时间这个历史的方法是卡到时间这个view里面会去调用你你的这个历史的方法,所以说这个历史的方法呢,你事先要写好对不对,好返回。什么呢?返回我们的返回这个客户切片。能理解吧?好,同样我们给他来记,做一个操作,This,走。然后呢,这个地方他要list一下list。返回切片,那也很简单,Return什么呀,This点。
10:00
他的customer就完了。对不对,那当然它返回的类型呢,是不是就是这个切片类型。这大家能看懂吧,就返回的这个切片类型是model customer这种切片。好,写完了。保存一下,看看有没有代码错误。好,这边有个问题啊。他说,UN new customer。好的,那是不是因为这个new customer它是在我们这个model这个包里面的里面定义的是不是,所以说呢。那我这地方应该这样写才可以model点。是不是这样写才可以成功啊?好,这块又报什么错?他说,Is not a type。哦,这是个方法哟。New customer,诶,这是个方法,我们怎么这么这么去用呢?这样用就不对了。我这是一个,我这定的是什么呀。是一个方法。诶,大家看这里我就写的这么写的哦,是一个方法,那就显然这这写的有有点一塌糊涂了啊,那应该是。
11:04
扩起来。是不是这才是调方法吗?这才是调方法。没毛病的吧?没毛病,好,现在这块的两个核心方法写完了,那回头呢,我们要来写customer view了,那这个customer view里面呢,它应该首先含有一个customer service的这个字段。因为为什么要有这个字段,因为我要通过我要通过这个service里面的这些方法来调用它吗。所以说我要在这个,呃,Customer view这个。结构体里面呢,应该有这么一个字段才可以,大家能理解吧。必须理解啊,因为我要从这去调它。调用它这里面的方法,所以说我必须要有这样一个字段,如果没有这个字段,我就没办法调用了嘛,那就不满足这个面向对象编程的基本要求了,对不对?好,同学们跟上我的思路,那现在呢,首先我要增加一个字段。
12:02
增加一个字段,什么字段呢?就是customer这个service。Ser SV,对不对?我要增加这么一个字段,好的,那首先呢,我们就来写一个吧。Customer。Service好类型是什么类型?是不是就是这个这个类型。是不是这个类型的。但是大家知道你这样写肯定要失败的,因为这个customer service,它并没有在面包里面,它是在service包里面,因此我要去引一下。怎么以?非常简单。那就从这个src下面开始,Go code斜杠。我们这个包包叫customer。Ma斜杠下面呢,Service。
13:00
是不是这样写就对了,那就是service下面的一个这样的对不对,就是service下面customer这样一个。指针类型能理解吧?这么一个指针类型。好了,嗯,那么现在有了这个东西过后,但是你这初始化,在这初始化比较合理呢,显然是在创建这个V的时候,顺带把这个就给它创建起来,能理解吧,这里。完成。这里完成对。这个结构体的。注意听啊,结构体的哪个字段。这个字段的。这个初始化工作。这个这个字段的。字段的初始化。能理解吗?好,这个也非常简单,那就这样写了。就是customer view。点。Customer service。
14:00
S等于。什么?是不是现在我没有,我要去调用。我要去调用这个service里面的一个方法,是不是我刚才写的6SERVICE啊,是不是它返回一个customer service这个指针。能跟上老师思路吗?跟上啊。好,那我把它写进去。呃,又因为这个是一个方法,对不对,它是一个方法,这个方法呢,是在哪个包包里面,在service这个包里面点一下就可以了。好,那我们看看这个6CUSTOMER service需需不需要传什么参数进去。啊,不需要传任何参数。不需要传任何参数,所以说这个地方呢,我们就完成初始化了,也就是说此时此刻这个customer view其实已经包含了一个customer service。这么一个字段是吧,而且已经被初始化了,那有了这个初始化过后,同学们想一想,我现在是不是就去在这个里面去写一个方法。
15:02
能跟上我的思路啊。显示所有的客户信息。那也就是说我现在呢,需要在这里面写一个历史的方法,去调用customer service里面的历史的方法完成这个,呃,完成这个显示功能能理解吧。这条思路啊,Bank。This,新customer view。好,我要调用一个方法叫list。那这个历史怎么样把它展现出来呢?怎么样把它展现出来呢?非常的简单。首先。首先。获取到,获取到当前。当前这个,呃,当前所有的所有的客户信息。客户信息,其实这个所有的信息信息都在切片里面是吧。信息其实就在这个切片里面,哪个切片。
16:02
就在那个切片。在欺骗中。能理解吗?好,那你在这个切片里面我很好处理吗?因为你这里面已经初始化了一个customer service,对不对,那我就很好很简单了,This点。这个字段再点它的一个方法,就是说这个service里面是不是已经有一个方法叫list了。能理解吧,这是不是就是一个切片,我把它接收一下啊customers。诶,各位同学想一想,此时此刻这个customers是不是就是切片了,就是把这个你你这个service里面包含的那个切片返回来了。当然,此时此刻我们这个切片其实里面目前只有一个用户。当然是因为我还没往里面加嘛,我为了让他看到效果,我只加了一个客户。如果说你想加多个客户的话也是可以的,后面呢,我们通过这个呃,动态输入来添加这个地方,我只是初始化了一个用户而已,后面还可以动态添加,能理解吧。
17:08
好跟上我的思路啊,好拿到了,拿到过后我们现在就可以显示。它显示的时候怎么显示呢?来看一下它的这个界面,它显示的界面是这样子的。我到这儿来看啊。显示的客户列表,首先这有一个信息,我把它打印出来。跟上思路。Pretty Allen。客户列表。好的,这是第一句话,然后print。最后这句话是什么,大家看一下。这个叫客户列表完成好,我也把它粘到这里面来。对吧,那中间同学们。中间是不是就是我们这个客户信息啊。中间是不是就是我们的所有的客户信息,好先把这个表头打出来一下。
18:04
表头我们先打出来,表头是这样打印的。诶,我们。把这块整体拷贝一下。是这个意思吧。表头。好表头打出来,诶没有粘对,粘到这个里面去。跟上思路啊,同学们。那现在呢,编号。我们为了好看。我们用制表符用一个。Table来控制它的这个这个格式。对不对,这样就比较好看。好的。我问大家一个问题啊,同学们,此时时刻这个customer是不是就是所有的客户信息?因为你service里面,你这个service里面维维护了一个切片嘛。我把这个前面也拿到了。那我现在显然对它进行一个便利就可以了,是不是我就负循环了啊for循环。
19:02
嗯,那就for哀。我就用一个最简单的方式,好吧。I小于N。我把这个切片。的大小统计出来。I加加。对不对,好,我就输出,呃,大家想一想,我们我们现在每取出来一个就是这样取的话。这样取的话,是不是就是每一个客户了。是不是就是每一个客户。那如果说我们现在在显示他信息的时候,我们还一个一个去显示比较麻烦,比如说你像这样写说老师我这样显示不就完了吗?Format。怎样显示第一句话?点他的ID。是不是这这个就。哎,同学们想是不是这个就就把ID显示出来了,紧接着你又去显示。
20:03
I点他的名字是不是这样,这样子是可以完成的呀。这样是可以完成的,但是这样写太太low了。太low了,因为你这个你在这不就是要显示每个客户信息吗?那干脆我们把这个方法直接封装到每一个客户里面去,不就完事了吗?能理解我的意思吧,就说你实际上是可以这样一句话一句话的打出来的,就是说ID一个斜杠替名字连性别年龄,电话一个一个写,但是这样写太笨了,我们干脆这样做。大家看啊,我干脆怎么写呢,我不这样写,我直接。在这个customer里面,我写一个方法,也就是说。我在这个地方。我在这个地方。写一个方法。写一个。写作方法。方法。显示。当前该。
21:02
该。该用户的信息。的信息。比如说这个方法我们叫。Get in for,返回一个字符串不就完了吗?是不是这样更简单呀?是不是这样更简单,来,我写一个啊,找到它。啊,就是返回返回用户的信息。是不是这样更简单?好,我来简单的写一下。呃,首先呢,是一个customer对吧。我用this customer。然后get。In for。Get in for。好的,我让他返回一个字符串。能理解我意思吧?好,然后呢,我把这个字符串拼接一下in four。Info返回一个in for。怎么把它拼接起来呢?用。这个格式化。F。是不是好,这样就比较简单了,我们来看,首先把ID取出来。
22:04
这个Z。ID。是吧,那这样子我们这样写就完了。第一个百分V。斜杠器。再来一个百分V斜杠T1推推,一共有几个字段啊。呃,有六六个3456写完了,你看第一个ID,第二个是吧,第二个又是我们的名字,第三个是性别,第四一个V是年龄,第五一个是电话号码,第六一个是什么呀?是电子邮件,那这样的话就简单了,就是this第二。ID。This,第。Name。This,第二。真的。G,这样子就能体现出这种封装的特点,大家大家体会一下啊,注意体会。好,我换行。然后呢,再来一个this。
23:01
This点。什么呀?间断过了年龄this.form。再来,这是第email写完了,同学们可以看到此时此刻我进行的一个格式化的处理,然后呢,我只要做一件事情,Return in for,因为in for就是一个字符串。因为你这你这段不就是返回了一个格式化的字符串吗?好,当我有了这个东西过后,大家想。是不是,诶这帮为什么报错了。好,是不是啊,我们没有引这个包。1PART。引进去就可以了。也就是说现在呢,我们只要传一个customer,他就可以把这个customer的这个信息给你返回去,而且格式化好了。对吧,格式化的。格式。格式化后的。格式化。格式化的啊,自自串。
24:01
字符串,那既然有了这个方法,那我们就很轻松了,要去显示的话,我根本就没没有必要一个一个的取出来。对吧,而且将来这个ID假设人家这个I是小写的,你这样写还取还取不出来呢。对不对,是不是还取不出来呀。那我现在有了方法,我就简单了,我就怎么写点一句话的事,点什么呀,Get。Inform。然后呢,把它输出来就行了。因为你get in for就返回了一个字符串嘛,然后呢,我又。这个方法把它输出。完事了。大家看这样能理解吗?就说。我我取我从这地方取到了一个customer,然后呢,我调用它的getf方法,而这个getf方法呢,其实返回的就是当前这个客户的信息,而且呢,已经格式化后的。那我拿到这个信息过后呢,我再用print LN把它输出来就完事了。
25:05
能理解吧?好朋友们,现在呢,我们保存一下。好同学们,现在我们看这里啊,当用户输入一个四的时候,就是显示客户列表,那这个时候这段代码我们就换了叫this点。List。因为你这个this就是customer view,而customer view里面又写了一个历史的方法,而这个list的方法呢,又去调用了我们service里面的list。大家有可能会觉得说,老师为什么这么麻烦。这个就叫结构,这个就叫程序的结构,如果我们没有这种结构,我们直接用这个view去调用customer,我告诉大家,后面我们的代码就会越来越难写,而当我们用了这种结构过后呢,有了界面,有业务逻辑层,有model层,这样的代码扩展性、可读性都会非常好。
26:00
啊,那大家现在如果还没有体验的话呢,后面我们在写修改删除和查询的时候呢,会更加体现出它的优势,能理解我的意思吧。好,这样子呢,我们就可以写到了,大家看这个流程是什么样子的啊,再走一遍。我们创建了一个customer view。而且初始化了它里面的一个service。这个呢?里面是有方法的,对吧,然后我给这个custom view里面写了一个历史的方法。这个历史的方法呢,上去过后先调用customer service里面历史的方法,把我们的客户信息拿到,拿到过后我输出了表头,还有表尾。然后我便利从这个customer service里面获取到的所有客户信息。然后调用customer,它本身的一个方法叫get in for。把它本身的信息返回来,然后进行一个格式化的输出,代码写完了。
27:03
来,朋友们,我们可以看到代码能不能正确运行,就看这了啊。跑一下。好,首先呢,我们来输一个式。这时应该输出一个张三。我们可以单看到代码完全没有任何问题,一次性过了。大家看到我目前客户列表里面有一个张三。一号名字张三男二十幺幺二邮件对不对,因为现在呢,我在初始化的时候,我只我只写了一个用户,所以说同学们可以看到只有一个用户,待会呢,我们下一步就完成输入一个一,让我们添加一个客户,添加一个客户过后呢,我们再去。显示客户列表的时候,就会有二号用户。这个二号用户就是你新添新添加的用户,能理解我的意思吧,当然了,大家也可以想到,在添加客户的时候,我们肯定要把这个新的客户加入到那一个切片里面去,才可以进行一个保存,对不对?
28:07
好,这个地方我再做一个处理啊,因为这挨的太紧了,我们。给他来一个换行。吸个N,吸个N,这样看起来舒服一点。好,我们再来看一下。这个好看了没有啊?不。再来一个。我们输入一个四好,这样看起来更更更舒服一点,客户列表对吧,就有了。好,同学们。那经过刚才老师对代码的分析,以及我们这个代码的实现,大家能够体现出我们这个客客户关系管理系统的一种结构。从而呢,大家对这个我相信认识的更加深刻一点啊,就大家一定要注意,我们写程序就是要有结构,就是要有框架的概念,你不能说我上来之后,我把所有的功能写到一个文件里面去。
29:00
没有这个分层的概念,我可以负责任的告诉大家,这个程序只要稍微大一点点,你立即就看不懂了,你看我们这现在就很清晰了界面。这个是处理业务逻辑的,他是真正干活的。他是真正干活的。那么呃,这个呢,就是我们的数据对吧,这里面呢有一个切片,它维护了所有的客户信息,而上面呢,其实是调用service里面的方法来完成相应的处理,它重点是在界面这一层。而这一点呢,重点是在业务逻辑。他是真正干活的。而这个呢,是我们的数据。它表示一个数据能理解吧。OK,好,我把这段代码给同学们整理一下,反述一下啊。板述一下,那现在呢,我们可以看到代码我们已经实现了,对吧,那我们看看我们是写了哪些东西。给大家做一个整理。
30:00
好,首先呢,诶这么。为,为什么报错了?保存一下哪里有问题。他说end with新款啊,那这个他说这方写这个东西他觉得不好是吧,啊不好,算了,这样写。这样写是不是就没问题了,还是一样的是吧,这把我们这打一个斜杠。这样不就OK了吗?对吧,这样就OK了,好,我们把这段代码,因为代码量有点多啊,我们来看看是我们修改了哪些地方。跟着老师思路。跟上老师思路啊。嗯,还是针对这三个文件吧。我们不可能把代码再重新考一遍了。好,我们看一下我们修改的是哪些地方。跟着老师思路,首先呢,我们修改了这个model。
31:02
Model这个包包下面的customer go。还有印象吧?好,我们先把它复制一份啊。这个地方我们是做了修改的。还有一个地方呢,就是我们service层是不是我们也做了一定的修改。对吧,我们可能是增加了一部分,也有可能是改了一部分,我先把这个写好,然后呢,我们在view这一层。V,这层我们也做了一些改变。好,我们来一个个看,这里我们是不是增加了一个,增加了一个方法。在这。我们在这里增加了一个返回用户信息的这么一个方法,还有印象吧。是吧,应该还有印象啊。不是说就忘了。我们增加了这个方法。明白。好,把它放到这,这是我们做了一个增加。那么我们在service。
32:00
Customer service,我们又做了哪些工作呢?我们做了哪些修改呢?打开它在这里重点是我们是增加了这两个方法,还记得吧,一个是返回一个。Customer service这个指针类型,而且呢,我们还做了一定的初始化的工作,同时我们还返回了这个客户的欺骗,对不对?我们增加了这两个方法。我在整理代码的时候啊,我不可能每次都把这个代码重新给大家拷一遍,而且也没没有必要,因为最后呢,我会把源代码给大家。我在总结每个功能的时候,我会把变化的代码写到这里。啊,变化代码,只要你认真听的,肯定是知道老师这这段代码是干什么的,对吧,我们做了一个增加,我再注意注意增加了,啊增加了两个方法。所以大家一定要认真听讲。增加了两个方法,好,V这一层我们做了什么工作?大家来看一下,V这一层呢?
33:03
哦,我们其实这块变化的比较多,首先我们增加了一个字段。对吧,我们还增加了一个历史的方法,我们还在这个地方做了一定修改,哪里是不是在这。做了一个修改,就是初始化了V这个结构体里面的。Customer service这个字段。同时我们在这也做了修改。所以大家可以看到,在我们写代码的时候,每完成一个功能,其实我们有时候是。这个文件改了一点,那个文件增加了一点。所以说如果我们初学者的话,可能不太适应这个东西,他会觉得,嘿,韩老师,你为什么写代码,一会在这个文件写,一会在那个文件写,一会这增加一点,那个那个地方又修改一点,告诉大家写程序就是这样子的,写程序跟我们盖房子不一样。我们盖房子是第一层盖了盖第二层,第二层盖了盖第三层,对不对,但是写代码呢,它其实是一个反复螺旋递增的一个过程。
34:07
就是说你同一个文件可能是完成这个功能时候,你会加点东西,完成这个功能的时候呢,你会修改一点东西,就是这样子的啊,大家要在这儿一定要想明白。OK,好,因为这个代码修改的比较多,所以说我就不一点一点的改了啊,我把它整整体复制过来,然后呢,我把修改的地方给它标成一个蓝色好不好,大家跟上思路。修改的地方哪里修改的地方啊,我们来看一下。首先呢。首先这个地方是我们增加的。我标成一个蓝色粗体,大家一看就知道了,这个方法是我们新增的。这个没问题吧,这个方法是我们形成的,大家一看也一目了然了。这个地方。是我们新增的,因为原先我们输入式的时候,其实我们什么都没显示出来,对不对,是空的,然后呢,这个地方我们也做了一定的这个修改,就是初始化了一下。
35:10
好,蓝色部分就是我们这个代码变化的地方。应该能看得很清楚了。应该能看的很清楚了,好,同学们,那关于我们第二一个功能,客户信息管理系统的第二个功能,完成显示客户列表的功能,我们就给大家介绍到这里,大家好好的消化和吸收一下。
我来说两句