00:00
好同学们,那么我们在昨天呃上一次课呢,我们说到写这个海量用户即时通讯系统时候,我们提到,因为我们这地方要涉及到一个用户注册,还有呢,就是呃留言,那这样的话必不啊,就你没办法避免要把信息保存的数据库,所以说呢,我们前面花了一点时间讲一下red使用,现在我们已经呃有这个red了,所以说这个技术储备已经各位了到位了,现在我们回头正式来开发这个海量用户的即时通讯这个系系统来具体看第一个。那首先呢,我们来完成第一步啊,就说我们原先写到这个地方的时候把。把这个定位,定位到这个地方。回头在这了,我们已然讲了项目的开发流程,我们也讲了它的需求分析,而且呢,我们也做了一个小小的界面,那是个登录界面。现在呢,呃,我们讲了red red,咱们也也说完了啊,说完了下面呢,我们接着来看这个图,这个图是哪个地方的啊。
01:10
啊对,这个图是可以的,接着往下看,下边呢,我们就来完成它的功能啊,一步一步完成它的第一个功能。我们首先实现第一个功能,显示客户端的一个登录菜单,因为这里面呢,它有两级菜单,就首先他登录成功过后,我们会让他再进看到第二层菜单,所以这地方我们看看怎么实现,它来看这个第一个案例,第一步我们先实现这个显示客户菜单的这个东西。来,咱们一边写一边做笔记。好,第一个功能。给他来一个标题三。标题三。好,呃,具体来说,我们要实现这个界面。这个功能是什么呢?这个地方要实现的功能是能够正确的显示,能够正确的显示客户菜单。
02:07
客呃,就是那个客户登录客户端的菜单。好第一步,那么界面呢,我们这也做了一个简简单的一个界面,文文文字版的就这个界面。把它也拿到这里面来。啊,界面长这个样子啊,第一界面,那这个时候呢,它是可以选择登录聊天系统,可以选择注册用户,可以选择退出系统,当这个用户登录聊天系统成功以后,我们让他看到的是这样一个界面。就是说他一旦登录成功以后呢,我们可以给他显示这个菜单。就这个。这有个小小的界面啊,这边挺挺复杂的,就是说因为我在这呢,要做一个什么呢,要做一个消息的一个协议,这个消息协议我们看看怎么定,这是个关键点,就是消息协议把它定好。
03:00
而且涉及到一个读包和写包的,它的一个流程啊界面大致这样子的,那么现在呢,我们先来实现这个最简单的功能,代码啊代码实现。思路分析思路很简单。思路分析这个呢,就谈不上什么分析,直接写就行了,这个非常简单啊,这个非常的简单,非常简单,直接写。直接洗就可以了。直接写。好,那么我们来代码实现它。代码实现好,那么我们就来一起写它,打开这一个base code。现在我们新建。新建一个这个。一个文件夹吧,叫char。聊天室吗?好,我们写一个文件夹,叫room。聊天室。好,聊天室我们里面呢,先建一个子文件夹,代表我们的客户端案子。好,当然了,我们应该还有一个服务器端,Server。
04:04
好,先把这个做好啊,先把这个做好,客户端这块呢,我们先来一个简单的客户端这块,先来一个简单的来做一个这个文件。Me?点购。那么他一旦登录过后呢,他要登录的话,同学们可以看到他一登录呢,诶先回到这啊,他一登录我们需要去调一个函数,所以说呢,我还要写一个log login.go。现在先做一个简单的。啊,慢慢慢慢再再往里面加东西。啊,这个地方我们再写一个叫做logging go。啊,OK,注意听啊,今天肯定有,班上至少有一有一半同学是要听蒙圈的啊。因为我我们写的这个,呃,聊天系统不是站在这个角,站在这个实现这个功能角度,而是站在这个代码,它怎么设计更合理,说代码呢,肯定有些东西只稍微不注意,就是说肯定就就听懵了,就听懵了,现在现在有点简单,先给大家不要那么猛,有一个简单的过渡啊。
05:09
好主,然后呢,Import。好,Format。然后呢,这个地方我们呃见面嘛,对于我们来说还是比较简单的,所以说老师就不啰嗦,直接写一下就行了。啊,这是一个主函数,那那主函数显示个界面,我们以前做过好多遍,对吧,就是这个界面嘛,这个界面它长的这个样子,我们我们再去看啊看,那就是首先上那个欢迎登录多人聊天系统,我们把它输出来,然后这边肯定是一个循环的嘛,假设是个循环的,就说他这个登录过后出错了,我们让他再提示说来一个for循环。来一个for循环。好,那么老规矩,我们定义两个变量,一个变量是接收它的输入,接收,接收。接受用户的这个选择,那就是他选择哪一个,第二个呢,就是呃,判断是不是还要在这个菜单循环选择,就是判断是否还继续还继续显示菜单,显示菜单,那现在呢,我们这写两个变量,一个是选择啊,那就是。
06:19
呃,定一个VRK,我定一个int。好,再来看菜单,是不是还要继续显示lo默认呢?我们就让它一直显示处。好,现在打印这个菜单。好,简单写一下啊,欢迎登录。啊,欢迎登录多人多人聊天聊天系统。好,OK。好,这个做完以后呢,我们把这几个选项给大家整理起来,第一个呢,就是同学们看到的就是呃,登录聊天聊天聊天室吧,咱们直接叫登录聊天室,第二个叫注册用户,第三个是退出系统,直接这样写啊呃来几来几个这个斜杠吧,简单一点一。
07:07
一叫做呃,登录登录聊天室。聊天室。啊,聊天室好,第二个。第二个呢,叫做注册用户。对注册用户。就注册一个用户,注册用户好,第三个呢,我们叫做退出系统。就是你不想玩儿了。呃,退出系统后面可以不停的加功能啊,退出系统。就说我们按照这个结构做好了,加功能特别简单,第三一个呢,就是让他选择啊,请选择一到三。写个字儿。我看是菜单是怎么做的是。哎,这个叫做请选择一到三。请选择OK。一到三。好,这个也很简单,好写完了,那写完过后呢,对不对,我们就让这个人来输一个,输一个值,那就这样提示了,他输进去我们接收一下。
08:06
呃,叫SC。F因为我格式化了,所以说D来一个换行,然后呢,这个地方一定要换行,不换行的话,有可能导致一回车它整个全部都走光了。所以我在写代码的时候呢,可能已经给你们把很多坑都避免了,如果你们自己独立完成,你会遇到很多很多坑啊,所以这点对大家其实特别不好,因为你你你失去了一个调试,调试这个程序的一种能力,尤其是在多线程就多个,因为这个我们现在是TCP加GR了,加TTCP加GR,还有这个数据,还有协议的定制,其实他还是有一定复杂度,但是这些坑呢,老师在写代码的时候,其实就已经给你避免了。其实你们自己要独立开发,你会遇到好多问题,但是这个调调错的,这个机会反而没有给你们。所以说我今天可能要多给一点你们啊,多给一点你们好,然后呢,这地方我们写到这里面叫K好大地方就写Switch了。
09:04
Switch,当然也很简单。我们这把这个K写到这里来做一个小小判断,K因为我已经说的是个整数,所以用用整数来判断。其实其实这地方我为什么用整数,没用字符串本身就是一个有道理的,如果我用字符串,它本身一回车全部一下就打下去了,这也是个坑。但是你们就看不到这个坑了,好写到这print简单写一下啊,就说登录聊天室。好写到这儿,然后呢,其他我就粘贴复制了,同学们。这也很简单,第二个我们就先提示他一句话说注册用户。这边因为有二级菜单了,所以说大家得想怎么做。啊。这是第三,第三一个呢,我们说显示,呃,叫退出系统。退出系统诶写错了啊,退出系统应该写到这三在这好,那最后一个,如果说他呃输的不是一到三呢,我们应该给他一个提示信息,说你的输入有误,请重新输入对吧?A。
10:14
好,然后呢,这提示一句话就说你的输入有误,请重新输入。你的输入有误,有误请重新输入。重新输入。好,那现在这样子,就说他只要选择一个对的,我就退出来,那如果选的不是对的呢,我就让他反复的提示,那就在这儿了,如果他选选的是这个登录聊天。登录聊天室,我就先退出来。我就不让他再反复的去进行这个循环了,所以说我把这个loop设置为一个force。好,那这个时候我们应该填一个loop。就我根据这个lo来判断,你到底还要不要继续的显示这个菜单,如果他说登录聊天时,那我就退出来,我就显示下下一个让他输东西的位置了啊,这先前是这样设计的,后边再慢慢的调整,那如果说他是注册用户呢?诶那我现在暂时不退出。
11:11
啊,展示不对数这个地方保留,就是输入有误的话,就反复让他在这输啊不出来。退出这个系统,那我们这也给他做成一个,这些都可以退出,只有他这一个不退出的loop等于false。好,当然这边呢,也设一个false。等他退出这个菜单以后,我们就可以显示二级菜单了。呃,因为你将来菜单可能是二级,可能还有还有三级对吧,现在呢,我们就说显示二级菜单后面还可以修饰,还可以调整啊,现在呢,根据注意听。根据用户的用户的输入,用户的输入显示这个新的新的一个提示信息。
12:00
好,那这这个时候咱们怎么做呢。因为你在这个地方K已经拿到了,所以说我可以做一个判断。If k。等于一。这说明这个用户想去干什么呢?想去登录聊天室了。Else,其他。L1啊,假设其他我先暂时不去处理,待会再处理,因为先把这个登录聊天室做完,再去做注册用户,再去做其他的功能,因为你登录聊天室里面进去过后呢,里面还有好多功能,比如说。呃,比如比如说看在线的用户有哪些。比如说发一个消息登录,还有注册登录也在这里面写的,如果登录没有这个人,你还去注册。这些全部都要自己定义。因为我们现在是用的TC pip,所以说这些整个这个流程全部要自己定义,如果你是用的外部开发,其实很容易啊,外部开发比外部开发的难度要比这种要要低一点啊,至少在在这个设计层面上要低一点,相对说整个这个流程包括包括我们这个呃,底层的这个这个结构外部写好的我们要自己去写。
13:09
好,如果是K等于一怎么办呢?好,现在呢,说明用户想干什么呢?说明用户用户要用户要登录了,对吧,用户要登,那既然要登录。既然要登录,我就让他提示信息,提示进去成功了以后,我再跳到一个界面,再说一句啊啊,我现在写了啊,说明用户要登录,要登录的话呢,我就先让他请输入。来print。我提示一下,请输入用户的ID号,看一下你的设计。看一下你设计,人家的设计是输入ID。输入的是ID号,就好像我们QQ一样,同学们,我们登录的时候,QQ其实我们只有数字,你看QQ号里面一般不含这个字符串,比如你的QQ号是12345,对吧,没有说张才一个什么什么什么ABC12345,那么我们也将设计,就说我们的ID呢,只能用数字。
14:07
包括银行银行银行号一般也是就是存的数字啊,那么我们用数字就行了,就让他输一个整数进去,那既然你输的是一个数字,那问题就来了,那你这个ID在哪里去定义呢。因为将来这个ID肯定要用到别的函数里面去,所以说我先暂时的在这定义两个全局变量后面再说怎么去处理啊,这定义两个两个变量一个表示。一个表示用户的用户的ID。表示用户的ID,一个表示用户的密码。哎,一个表示用户ID,一个表示一个表示用户的密码,这个对我来说还是比较简单,那密码肯定是字符串了。那这个我就开始定义VR user ID。UID。
15:02
VR user密码尺寸类型。好,这两个就有了,那这两个有了以后呢,同学们跟上老师思路啊,现在呢,我们就来接收它,接收的时候我们用格式化。PRD,这个时候咱们都要用格式化啊,因为你输入东西太多了,不用格式化的话,可能一下一点全部串过去了。F轴好百分D注意斜杠N,这要一定要打个斜杠N,一不打斜杠N的话,他这个一回车,他一一串全部跑光了。啊,这个斜杠是个是个是一个是一个坑。K,那就是那个user ID,注意这面应该传的是一个。我看上面是不是算的,诶对没没错,UID先拿到了,因为它是一个整数,所以说格式化是D,紧接着呢,再让他提示说请输入用户的密码。哎,密码。那密码呢,咱们怎么写呢,也非常简单,就user WD。
16:02
UPWD写完了,那现在注意听,因为你现在要登录嘛,你现在既然要登录,所以说你肯定不不能把所有代码都通通写在这一个命令文件里面,这是不现实的,所以说你现在现在呢,一个最直观,最原始,最朴素的想法,就是你可能会把登录写在另外一个文件里面去。但是即使这样也不够啊,因为这样还是没有程序的结构。这个程序结构我们会一步一步把它推导出来,现在先不着急,现在呢,你肯定会出一个最朴素的想法,你会把登录写在另外一个文件,我也这样去想的,要做一个初学者肯定这样写的。我们先。先把什么呢?先把这个登陆。先把这个登录的这个函数吧,写到写到另外的一个文件,另外一个文件,因为这个登录肯定很复杂。你想想你这个登录是你想这个你想一想都觉得很麻烦,你登录你要输这个用户密码,你输入用户名密码过后,那边要去校验,校验完了过里面给你回复一个信息。
17:10
但是有些同学说,老师我回复一个OK和L就行了呗,那太low了啊,如果你回复的什么一二啊,那个根本就不是写项目的思路,那纯粹就是写的几个小玩具,这里面要设计那个什么东西呢?一定要去设计一个咱们的一个协议,就要设计个协议,这个协议我们要统一做一个message,这个message怎么设计是咱们要去想的,那它里面肯定还是还要扩展性。不能简单说一个文本说啊,一是什么,二是什么,三是什么,那肯定不是那样玩的。QQ也是这样玩的,我们以前在这个做那个,呃,即时通讯软件的时候,做了一个lava lava,那么我们那个协议其实最核心的很难做啊,所以这地方我们也按照尽量按照这个这个实际的一种方式来做好吧,好先不着急啊,先写到另外文件,比如我就先写到,比如我先写到logging顶购。
18:03
Logging go on。那大家一点点来,不着急。Package。Package,那么同样现在还是一个主包包。好,这里面呢,我可能要引入一些东西,Format,这个一般来说最基本的呢,都会有个输出,因为你在做测试的时候,肯定需要写的东西,好我们先写一个函数。写一个函数干什么呢?啊,完成一个完成一个登录,完成一个登录校验登录,你看你你这边写登录服务器那边还要接,接完了那边还给你回信息。就相当于两头都要写了。两头都要写了,这个地方还不简简单到数据库去验证,因为你你的服务器那边还要去接,然后去解析你是什么结构,然后再干别的事情。说它里面的东西肯定是有有一个判断的问题,好,那现在呢,我们就写这样一个范,那么这个先写一个简单的log啊,然后你既然是logging同学们想到。
19:04
你既然是登录,你既然是登录,那我肯定要知道你的用户名和你的密码,于是乎,我这个函数肯定至少要接收两个参数。行参至少要两个,哪两个呢?第一个就是你要给我你的用户ID类型的。你还得给我用户名密码是最类型的,注意咱们秘密这个参数的名称啊,我的建议是你这段这段名字最好跟他跟你这边保持一致,这样呢,你免去命名的一个痛苦。以后大家都知道,给函数,给我们的变量命名,给函数命名,给参数命名,其实是一件特别头疼的事情。你后面就知道了,甚至有时候你都不知道怎么命名,我们今天可能就会面临这个困难,因为我们的消息种类很多了,我们会有登录消息,还有一个返回响应的消息,还有一个发送消息,那边还有一个上线消息,还有一个群发消息,还有一个点对点,你你你名字都不知道怎么取。
20:02
啊很很麻烦的,所以现在呢,我给大家一个小小建议,说你为了省事,你就干脆那边要什么事叫什么就完了啊好,最后你有没有登录成功呢,对方应该给他返回一个结果,比如说呃,一个一个信息嘛,我们就返以A的形式返回。注意啊,呃,同学们,还有一点我告诉大家,就尽量呢以这种A的形式返回,不要用那个真假,因为真假描述的能力太弱了。你真假,你可能是比如说登陆。我有,我有可能要知道你登录登录失败的原因是因为这个用户名存在的,还是因为你的密码不对,还是因为就是说服务器里面遇到故障的一个错误,如果你只是一个真和假,这个描述能力很弱,它就是两个一二。但是error就不一样了,Error它可以返回各种错误,比如说你自定义,你甚至就像前面我们讲的那个定义个常量,诶,我一判断你的物信息是这个,还有描述信息,所以说呢,我们最好用这种返回L的信息来描述到底OK还是不OK,因为你成功了,大不了是个嘛。
21:09
你看我们为什么动不动就是if near不等于呃,If l不等于near怎么怎么样,等于near怎么样,它就是这个这个道理好,那现在有了这个东西过后呢,下一步该干什么呢?下一步就很复杂了,就要开始。下一步。下一步就要。就要很多功能的,就要开始定协议了。这个定协议是一个大事儿。所以说既然定协议这么大呢,说我现在还暂时不行啊,因为这这这一定协议一堆事情,我们先这样子啊,我们先这样子,我们先,因为目前呢,我们先是把这个菜单做出来,我们先把菜单跑起来再说。好,我现在把这个信息提出来,你输入的用户名和ID是什么,先先写出来啊,大家不要着急。这个地方稍不注意就会容易。搞不定。
22:00
啊,我今天写写代码压力很大,因为这个稍稍微不注意,一旦调错调不出来,我自己也写不出来啊。这个不不是哪一个啊,就是他做了好多年开发的,他到这来压力很大,为什么呢?因为他这个东西。比较复杂了啊,比较你后面就知道了啊,后面就知道了。我希望不要出错,出错了调调起来很麻烦,因为因为它是有网络在里面嘛,还有协议很多,好这个userr ID先打出来,然后呢,再把user的密码也打出来,先看一看。最好的方法就是写一步测一步,URID,好,UID先打出来看一看是什么,你输的用用名还有密码呢,也写出来,好,先写到这啊,同学们。那现在呢,因为我现在没有去判断有没有对,说是自己返回Li就表示暂时没有错啊,暂时没有错好这边呢,我来调它,怎么调它呢,非常的简单,因为他目前啊,各位看到你们两个都在煮包包,你在煮包,我也在煮包。
23:00
大家都知道在同一个报下面呢,其实我可以直接写这个函数,即使你的这个函数名是小写的,我也可以调,所以说呢,这个地方就很简单了,就log。把什么传进去呢?把他得到的这个user ID,还有他的密码也传进去。好的好,那这个时候呢,我会接收到一个L,我会接触到一个L,当然这个L呢,给定一下,那这个L呢,我们可以进行一个判断啊,这个L当然当然还可以有很多自定义的啊,如现在我先简单了,如果不等于列,我们就说明成功。当然后面我我有各种判断了。好,这个是就说登录登录失败了啊,登录失败。登录失败。好,那么这边呢,还有个l else。Else。好,第二时呢,就说明他登录成功了啊,登录成功。也写一个啊,登录成功就写的特别简单一个案例。
24:01
登录成功。好,登录成功过后呢,我们这个就就算是假设就算完事了,Else,如果它不是一,它是别的代码呢,好假设啊,要是if。如果假设这个人输的这个K,它是等于二的,等于二是什么呢?哦,你看是注册用户,好,我们就这边呢,就应该是处理他注册用户的逻辑,先写一段代码。好,这边的是就是显示或者是进行啊,进行用户注册的一个逻辑。好代码呢,第一个第一份代码咱们就基本上就算是完成了,我们现在跑一跑,看能不能跑起来保存。第一个坑就来了啊,第一个坑就来了,同学们看到当我一运行的时候就已经要报错了,CD点点CD点点CD到刚才我们下。Chart room这个项目里面,大家看到我们目前呢,有一个叫client,我们先进到client。
25:07
好,DR。Di。OKDRGO呢,这有个main.go按理说呢,我们应该这样运行就跑起来了。但是我一回车他报错了,应该。他报了一个错,他说同学,你第50行有个UN log,他说这个地方错了。他说我的logging真用错了,也就是说他告诉我第五这个地方,他说这个logging没有定义,这个时候你第一个坑就开始踩到了,这个坑的解决方案我们以前讲过。我们以前讲过。大家回忆想。错误的原因我不多说,我直接告诉你们怎么解决。因为原因是你在这个面包包,这个是个主包,这个呢也是个主包,在这个主包的时候呢,我们要完成这样一个编译的话,应该是退到他的src去。
26:01
到这个src去啊,当然我们因为后面这个项目呢也很多,所以说我们先这样去,应该退到他s r c build来去调用好,所以说现在我们来解决他一下啊,这个地方要先退再退,再退再退,退到这我们go build go build。Build,然后呢,我们go code目录下面的chart room。Room下面的这个client。点下面的就就到了下面的。下面我没我没有再分啊,现在没有分,以后还要分,这个就写完了。编译,编译过后呢,我们会得到一个什么文件呢?我们会得到一个。main.exe我先把这个删掉啊,以前不要的先把删掉。删掉delete。Delete没点够,所以说这个时候你突然发现会点倒指令也还是不错的啊,如果你不会会倒指令的话,说实话还还很挺麻烦,好,这就删完了,这还有个delete server。
27:05
这样子的话呢,就是个空的,我们再再把它编译一下。大家看到这个时候的编译呢,有一个问题就说,因为它默认会生成一个main.exe到时候我们写server的时候呢,它也生成一个man.e这又是一个坑,所以在这个时候呢,我们就会马上告诉大家,最好指定一个名字。这样子呢,就是一个好习惯,如果这个地方我没有,我没有告诉大家,你会发现很奇怪现象,就是两边生成一个闷,然后你怎么编译那个代码都不会发生变化啊,所以说呢,我这就指定直接指定说你的这个客户端生成的可执行文件就叫可点,点击你的服务器端生成的可执行文件程序呢,就叫server.ex1好这样就区分开来了。好同学们,这个就做完,然后呢,Client走看一下代码。他说登录欢迎登录多人聊天系统没问题,比如说我输一个乱七八糟的五,他说你输入有误,你给我输对,你不输对,那我就不让你走。
28:11
啊,当然了,这个时候呢,呃,我们输一个三,看他有没有退出。退出系统,我们三是怎么处理的,看一下。我们三是这样处理的,三是false false往下面走,因为没有没有匹配到的,他就直接退了,也可以这样做,如果简单一点也可以这样处理啊说老师既然是退出系统,你也可以这样也行,有OS点直接这样退出也可以,也反正就退嘛。那这样写呢,也可以。只是说这样写完过后呢,你要把OS给我引进去。好,这样子再重新来一下编一下啊。走跑起来,好,现在我们来进入到登录系,登录系统我们看一登录,它会提示我们输什么东西。他说请登录聊天室,请输入这个ID,比如说我输了一个。
29:01
200输入用户的密码,比如说用用户密码是,比如说我输的是ABC回车。他说登录成功密码是用户名是两啊用户ID200密码,密码我没有拿到,说明有问题。密码我们看哪里写错了啊,同学们。密码是user user pw,你看这已经出了问题了。OK,非常好,同学们,大家已经看到这个问题了,来,重新再跑一下啊,再走一下,这个地方也要带一个斜杠啊,带个斜杠好,再再重新来一下走。跑起来。好登录输了一个100密码是比如说汤姆回撤好正确。还有一点我们再强调一下,这个地方如果你没带斜杠会有什么后果啊,假设这两个地方我们没有带斜杠,还有因为有时候我们会忘掉这个事情,我们看这样子会出现一个什么奇怪的现象。
30:01
好,我们再来登录一下。诶,写错了啊。直接走这个一好登录,我输一个ID号吧。直接跑。这个坑是为什么呢?因为你没有换行,你没有换行,他以为你一回车他认为啊。他认为。你回车就是他要输的东西,他就跑。他就直接给你跑了,他说你回撤就是给他出了一个这个字符算是什么,就是回撤。所以这光这一点就就能把你搞得很郁闷,说老师那我换这个呢,换L一样的下场啊,你这样写也是一样的下场。你这样写一样倒霉,再看一下,说老师我用L一样的再跑一下。来再运行。登录给他一个ID200回车哦,这个好像没有。这样把它控制住了是吧。诶,这个还可以。
31:00
这个这个之所以可以是因为你下面有个LS,下面如果是这个呢。这个应该也会也会倒霉吧。我试试看啊。如果两个都是这样子的话,我记得应该是要出问题啊。走,再来看一下。再看中一,那如果可以就可以吧,无所谓,哎,这还可以。这样就没问题了。这样就没问题了,那行吧,那我们这个这样子有一个什么问题呢?这样的话,你你接收接收过来接接收过来也可以啊,那我还恢复到刚才那个形形式吧。就说如果你用的是这个SCF的话呢,就是强调一点,要有一个斜杠。喜欢。好,第一个功能我们就做完了,第一个功能做完了,那么现在呢,我把代码给他整理一下,好我们怎么做的啊。下边我们写了两个文件,一个是main.go。
32:00
Client下面还写个log。点够好,同学们,我把这个代码呢写到这里,给大家板书一下,首先是main点购源代码,我先这样子截图发给大家。好,怎么写的呢?第一步是这样写的,来板书到我们的笔记中第26。对,第26。然后呢,第26继续截取第26行。好,第26行。27。截止到第51行。第51行。好,继续截取。51下边没有东西了啊,就是52开始就就全部接完。52~60全部接完。然后呢,我们这边呃,logging.go呢,我们这个代码相对比较少一点,就这么一点。好,先拿到这儿。
33:01
OK。好,同学们,那么关于我们第一个最简单的功能,就先是给大家写到这里。
我来说两句