00:00
那下面呢,给大家介绍一下go里面的有一个叫呃。Init init这个函数,Init这个函数呢,我们来看这个名字,大家能够猜的出来它是干什么的吗?Init就是那个初始化的意思,所以说在这里呢,我们给大家做一个介绍,就是每一个原文件中,注意听,每一个原文件件中都可以包含一个init函数,该函数会在main函数执行之前被go运行框架调用,也就是说init会在main函数。钱被调用。哎,这个函数呢,通常可以用来做初始化的一些工作,那么我们来看一个案例,来给同学们演示一下来吧。我们来看init函数的使用。来给他一个基本的说明。In it。Init函数,给他一个标题,我们来一个标题二好,基本介绍。
01:02
基本教授给他来一个标题三,好吧,给他来一个标题三,我们来看看这里面的具体说明,第一个呢,就是每一个原文件,注意听是每一个原文件都可以有一个initt函数,Init函数这个函数会在main函数之前被go框架运行调用,OK,好,这是它的一个说明,那么我们来看几个案例。来看一个案例吧,同学们。给大家来一个案例说明。那同学们看,打开我们的这个Vs code,我们新建一个文件。对,还叫function DEMO,我们这取个名字就比较好取了,叫init对吧,Init函数的介绍。或者这样写,放。Function。Function init,这样比较好记,然后呢,我们新建一个文件叫main.go没问题吧,然后前面这一部分代码呢,仍然是。
02:00
可以用。一样的。站过来。然后呢,写一个主函数。OK,然后在这个主函数里面呢,我们打印出一句话,好吧,这样写个叫me。然后呢,我们可以看到我在这写一个int函数,就是init函数,我写一个。Function I。这句话我这我这也说出一句话。我这也输出一句话,那这地方我们写的是init,同学们来看一下,当我执行这段代码,我们注意观察一下,是main函数先执行还是in函数先执行呢?我们来跑一下。CD点点CD到刚才我们写的function in。OK,好,我们go run一下,好吧,Go run make.go跑起来。
03:01
我们看到这里面输出的内容应该是先执行的是init,看到没有就是init函数再执行的命,从这个运行的结果可以看出来,的确。这个init函数呢,是在main函数之前来调用的,那这样的话呢,Init函数的价值就在于可以用来完成一些初始化的工作,然后再调用主函数,所以它的价值呢是通常。通常可以可以在init函数中完成初始化的工作。初始化工作。二初始化工作。哎,这是它的一个作用,那呃,一个基本案例我们就说完了,下边呢,我们来展开讲解它的细节,就是关于init函数呢,有这么三个细节,我要给大家介绍一下。好,把这个放到这来,然后我们把输出的结果输出。
04:04
输出的结果是这样子的,对不对。把这个输出结果呢,给大家往这放一下,大家看。是不是在这有个输出结果。这有个输出结果。看。对吧,没问题。那现在呢?我们就来讲一讲init函数的细节。函数的注意事项注意事项。和细节。细节。好,同学们,我们来一起看看它的细节,需要哪些地方给大家说一下,我们看第一个细节,同学们看第一个细节呢,就是注意一下,如果一个文件中包含有变量定义。就是我们这说的变量定义,往往指的是全局变量。那么有全有全局变量的定义。又有int函数,还有main函数,那么执行的流程是先执行变量定义,再执行int函数,再执行main函数,好这块呢,我们要把它好好的给大家聊一下。
05:10
来第一个细节。那走一个吧。诶,这地方不要有了啊,不要有了,看到啊,如果一个文件中包含有全局变量的定义。还有init函数,还有main函数。那么注意听,那么执行的流程是先是这一个变量定义,也就我们说的全局变量定义。全局变量的定义,然后是int函数,然后是主函数。也就是说,也就实际上全局变量的定义呢,是最先执行的,我们看一个案例。我们来走一个案例给大家看一下啊。做一个案例。非常简单,来走一个,嗯,同学们看,我在这里呢,写一个变量定义,比如说我这里有个变量叫。
06:06
Edge edge是个特类型的,我希望呢,诶,我我希望给他来一个初始化的工作。比如这样子吧,我们直接这样写。对不对,诶不行,这样还不行啊,我们这样做。我们直接给他来一个变量定义,那么变量定义的时候呢,我们这样写就可以了。这样写,H等于。就是。然后I it main函数,那这个这个问题是问题有点麻烦了,就说你怎么知道这个先先执行呢,因为没有输出,所以很难看,所以为了为了看到注意听,为了看到变量全局啊,全局变量是先被初始化的。先背初始化,初始化。
07:02
初始化的我们。我们这里先写一个函数。我们写一个函数来完成初始化,初始化那这样子啊,同学们看我这样写test。我让他说出一句话,对,听,你看我怎么来设计这个东西。同学们可以动动脑筋,比如说我在这里写的test。然后呢,我return了一个值,比如说了个90,我这样写。再看。让大家理解我想干什么吗?如果真的,这个是先被执行的。如果他先被执行,他就会去调这个函数对不对,那这样子这句话就应该先输出这个,输出了以后再输出它,再输出它,如果说的的确确顺序是先执行,执行这个变量定义,那一定先输出test,因此它是第一个先被输出的,而这个呢,是第二个被输出的,这个应该是第三个被输出的。
08:00
对不对,那最后呢,如果我把这个age打印出来。如果我把这个H打印出来,这个H就应该等于多少呢?等于90就对了,能理解哈,就看这个输出的顺序和最后H是不是等于90,那么各位朋友请看效果,我们跑起来。我们发现这里面有个变量,因为我们这忘写了一个返回值,对不对,好,忘写了个返回值加进去。可以了。看效果,你看T的函数的确先被执行。T的函数第一个被执行,跟我们分析一样,Init函数第二个执行,幂函数第三个执行,而且H的确等于90,说明我们分析是正确的。所以都同学们看到我们这一个原文件里面,构函数的原文件,呃,程序的源文件里面呢,它其实是先是执行变量定义,再执行init函数,再再执行init函数,最后执行变函数理解。
09:00
好,把这一块呢,给同学们拿到笔记里面来。这些将来我们都会用得到啊,就是在做项目的时候,这些知识点就会发挥巨大的作用,因此大家一定要重视我们这一块的基础的讲解。写完了。对不对,这就没问题了吧,那没问题,过后呢,我们再来强调一个细节,就是引力函数最主要的作用是什么?刚才讲过是完成一些初始化的工作,那有些同学说老师你给我举个案例来证明一下,就是到底怎么样用这个盈利的函数完成初始化工作呢?好的,我给大家举个案例。来。做一个应用场景好不好?比如说吧,现在。初始化工作把它标标出来,比如说现在我有这么一个需求,说这个main.go里面呢,要去用到另外一个包的文件,比如说。比如说大家看。我在这儿新建一个包包。
10:00
叫u ti u u ts u这个包包,这个包包里面呢,有一个文件叫UTGO。大家看这里面,这这是一个文件啊,我把打下包package。Package拿一个包吧,Uts前面我们讲过包对不对,然后呢,我就不写input了,我就不写input了,我直接写这么一两个变量啊同学们看这有一个变量。这个变量叫edge。Int。那全局的,因为我要在别的地方用,把它定义成全局的VR,还有一个name name。NAME10寸。那么这这两个变量呢,注意听这两个变量,这两个变量我希望在哪里用呢?在这个go。这个梦点go里面去用。但是我在用之前,我希望他先被初始化,能理解吗?
11:01
哎,我现在要说实话,也就是说这个变量age。和这个name。那这两个变量,全局变量,它当时全局全局变量我要在我们需要在main.go中用。使用。但是呢,我们需要初始化一下,但是我们需要初初始化这这两个变量就是age。Age和什么呢?和这个name。和这个name。对不对?那怎么做?一般来说可以让写in it,诶,我们在这里去完成初始化不就完了吗?因为我这是两个比较简单的变量,将来有可能是个连接,或者是打开一个文件,所以在函数里面去初始化特别的方便。诶,那我们就谁让谁呢,让init函数。完成初始化工作。
12:00
诶,这样就非常好了,那你看我怎么完成,比如说age。我就直接给他一个100岁。Name。Name。等于多少呢?比如说汤姆。这就完成初始化了。你看在这里面就可以完成初始化,那我在main里面怎么去用它呢?非常的简单,我先引入包包。对吧,引入。引包,呃,引入包,这个我相信同学们还有一点印象吧,就直接这样写,从哪里呢?从哪里开始引就是。从这个src下面开始引,对不对,那就是go。下线code。回车,呃,这个一个斜杠,斜杠完了之后是captain。CHAPTER06。斜杠,然后呢,这里面找到我们的这个。文件夹,我们文件夹是function in it,是哪个文件夹?同学们看一下是不是在这啊,是这个文件夹,说说function in it。
13:06
然后我们再引入这里面的有个uts玩活,好同学们看,我们来使用它一下,这引入包我们来用一下啊,Print。我们直接说H等于多少呢H。等于。取出来,那就是u tr包包里面的age。对不对,然后呢,我们说我们还要用到的是name。Name。Name等于多少呢?好,我们也把它取出来,就是U包里边的name单位写完,这是引入包是用,而我在我们在引入的时候,看这边有个问题啊,看哪里面有问题。包有七包。保存一下再。好没问题啊,这样就就就好了,刚才忘了保存好写完写完之后呢,大家看我们在这个主函数在这个面点go里面调的时候,其实这个U包里面的age和内呢,事先已经被这一个MIT初始化了。
14:13
那也就是说,也就是说这个地方应该输出100,这个地方应该输出汤姆就对了,好下。好下看效果。好,我们可以看到H的的确确取出来是。100,而汤姆呢,是也取出来了,那就说明我们在执行,执行这个代码的时候,其实它是在引包的这个过程,或者说是在调这个包里面变动的时候,他其实已经先把它初始化了,对不对,你不然的话肯定他先被初始化才有可能拿到值嘛,你也可以在这执行一下,我们看看哪个先被执行。我们写一下啊,同学们看这地方写个UT。这个包包包里的哪个呢?Init函数。
15:02
我们可以看一下谁先执行。大家可以猜一下,是他先执行呢,还是main里面的这个init先执行,你们可以猜一猜。好,我这边写完了过后,这边要引个包才行,为什么?因为这用到format函数。好,我import一下。Import。Format包好结果就没毛病了,来运行一把。走。我们可以看到。最先执行的,最先执行的其实是utl包里面的init,也就是说其实是被被引入的文被引入的这个包。被引入的包里面的那一个那一个uts go先执行对不对。好,然后是test,然后是it,然后是me,然后把这个输出看效果看到没有,好我把这个呢给大家先放到这里来,大家看情况是怎么样子的。好,我在这这样截图,我先呢把这个截过来。
16:04
对吧,好,为了让大家看得比较清楚,比较明白呢,我这画大一点。大家看这里是怎么赢的啊,这是我们这个项目或者程序的一个结构。那这段代码就是,它就是main,这个us go就是对应这个源代码,这里面有一个初始化的函数。好的,这是我们的第一第一块的代码。对不对,这是第一块的代码。这一块代码。然后诶,这个还可以再小一点。还可再小一点啊,把它放到这上面去就行了,然后呢,还有一块就是怎么去调用它的命命点go。这块代码呢,我们也把它翻过来。对吧。我们也把它翻过来看效果。好,这块。放到我们的笔记里边去。
17:00
放到我们笔记里面去,没问题了吧?好,这就是说我们在iit里面呢,就是init函数里边呢,经常用来做初始化的工作。这是这块,那现在还得还得有个细节了,说说韩老师,那你刚才讲的时候是这个main.go引入了u tr里面的那个UTS.go文件,那么他们之间这个调用顺序到底是怎么样子的呢?我有点听蒙圈了。好,来我给大家整理一下这个思路,就是第四题,最后一点看面试题。案例,如果men.go和UGO中都含有变量定义。Init函数,那么执行的流程应该是怎么样子的?就说假设我们这引引入的文件和命点购里面都有这种变量定义。Init函数,那么执行流程是什么样子的呢?大家看一个图一下就明白了,大家看这块,我就直接告诉大家怎么做的啊,大家看这里。
18:00
大家看这main.go如果引入了它。就是main点够这个文件,引入了UTS这个文件,那么执行流程是这样子的,首先先执行。被引入文件里面的变量定义这个地方。所以它是第一。然后执行被引入文件里面的init函数,这是第二,然后再执行这个main.go里面的变量定义,这第三,然后init函数,这是第四,最后执行main.go里面的主函数,顺序是这样子的,大家看一下,当然有同学说,老师,如果UTSGO又引入了别的文件呢,比如它又引入了别的文件一样的,那就先执行。这个文件里面的变量定义这个文件里面的in函数,然后再回来执行uts里面的变量定义in函数,最后再进行主函数里面的,听清楚没有。
19:01
这个呢,就是我们的一个面试题,大家注意记住了啊,这块我就不再去做演示了,肯定是正确的。我把它。给同学们放到笔记里面来。记住啊,这是一个重要的面试题,有可能被问到。好,我把第三个细节也给大家整理一下。第三个细节。好的,第三个细节就是刚才老师整理的这个。对不对。同学们看流程。这是一个面试题,请大家加深印象啊,就是。这样的流程先执行的是谁,我这画个图就很清晰了,我就不再做文字的说明了,能理解。记住这这个细节,好,那同学们关于函数的这几个细节呢,老师就给大家介绍到这里,一定要认真的领会好不好,在我们做项目的时候,如果需要去涉及到。变量定义一列的函数和主函数执行流程大家要搞得非常清楚,不然的话你就会蒙圈了,把这块好好理解一下。
20:06
好,那关于盈利的函数呢,就给大家介绍这些。
我来说两句