00:00
下面呢,再给大家讲一下包的第二部分注意事项和细节,那么看第六点,在同一个包下不能有相同的函数名,否则报重复,定义错误。重复定数,那这个什么意思呢?就是说同学们注意啊,我们这个勾浪员,他在管理我们这些函数的时候呢,它是以包的方式来进行管理的。也就是说,在一个包下面,假设在一个包下面有两个相,有两个文件,有两个文件,这两个文件它就不能有相同的函数名,能理解吗?打个比方,我举个例子。比如说这UR里面,你定定定义了一个cul,那首先肯定在同一个文件里面,你不可能再去定义这个相同的函数了,这是肯定不行的,大家看你在这写一个这样的函数。他肯定是要报错,因为你在同一个文件里面不可能有相同的函数名,你看这报错了。而且我告诉大家,因为刚才大家也看到我们在main里面去调一个函数的时候,它是通过这个包名去调用的,大家还有印象吗?我把这个先去掉啊。
01:09
它是从这个包名去调用的,那就意味着如果你在这个包下面,诶这个地方怎么还在报错啊,这这这啊这这个报错是是正常的,因为我在这个文件里面写了两个开了给这看书。大家回回到刚才说法,因为你在别的地方调用的时候,你是通过这个包名去调用变量或者是函数的,那就意味着在同一个包下面其实是不允许有相同的函数或者变量名称的,能理解我的意思吗?OK,那我我的意思就是说打个比方。你这儿肯定是不能用的。这个地方肯定不能用。就因为你在同一个文件肯定是用不了的。那我换一个思路说,老师,假设我在这个包下面,我还有一个文件叫什么呢?Uts two。点够,大家想这是一个新的文件吧,这是个新的文件,我们先保存一下,这个时候应该不会报错了。
02:01
哦,我在这个文件里面。可不可以再去使用这个函数名呢?也不允许,那就看,因为你假设在同一个包。Package。追听package UT s。好,我打了一个包,打了一个包,你写一个函数,比如说叫c hello c OK吧,OK。这个是没有问题的,我print说一句话叫COK,然后呢,我引一个包包。Form,这个时候我已保存代码,应该是正确的。对吧,没有报错正确,因为你没有重复嘛,但是但是大家看啊,因为你这个文件UT2S是是在UT2UT2S two这个文件是在这个包包下面,而这个U2S这个文件呢,也在这个包包下面,好同学们想一想,如果说我在这个文件里面写了一个fun,开了这个函数,你们认为可不可以。
03:01
你们认为可不可以再看一眼哈,你感觉应该是可以的,因为你这个函数名和这个函数名不在同一个文件嘛,对不对,但是实际上是不允许的,为什么不允许?因为想一想,同学们想一想,因为大家都在同一个包包下面,如果你叫calculator,我也叫calul,好,问题来了,那我在调用的时候调这个函数名到底调谁?它编译器无法区分,因此这种写法一定是错误的,来,我保存一下,你们看到它马上提示错误信息。再看效果。啊,他一定会报,大家看,果然报错误了,他在这里,他说。Culator declare的就是重复声明了,在哪里呢?在你的这个U这个文件的第九行。哪个这个文件就是这个文件的第九行,果然是提示信息,对不对,所以说我们这个地方再次强调一点,强调什么呢。就是老师说的这一点,在同一个包下不能有相同的函数名,当然呃,也不能有相同的这种全局变量名啊,当然这块肯定也是一样的啊,也不能有相同的包括啊,包括我再补一个叫包也不能有啊,也不能有这个相同的相同的全局变量名,当然全局变量名大家还没有学,所以说后面呢,我们还会提到这个东西,否则就会报重复定义错误,能理解吗?
04:24
啊,这个地方我给大家刚才举了一个例子,相信大家应该可以理解,而且原因我也说清楚了,因为我们在调用,调用的时候是用包名去点函数名,如果你这个包下面有相同的函数,显然它是无法区分的。从道理上也也能够马上说清楚对不对?好,我把这个写到这里来。好,这地方也有一个小截图,我把这个小截图呢,也放在笔里面大家看,比如说这有个get video啊,这里就会报错误啊,刚才我们说的这个。好,这这个截不截图也无所谓啊,其实大家应该都都能看懂啊,这个地方我就不截图了,一句话一句话的事不截图了,下面再来看最后一个,第七个细节很重要。
05:06
那么第七个细节是什么呢?就是如果你要编译成一个可执行的文件。则需要将这个包生明为命。也就是说,我们这个命包只能有一个。面包只能有一个,那么我们的可执行文件其实就是哪一个呢?就是main函数所在的文件,能理解吗?就说如就是我这说的,如果你需要编译成一个可执行的程序文件,就需要将这个包生明为面包,即pack面,这个是一个语法规范,如果你写的是一个库文件,则报名可以自定义,比如说前面刚才讲的像UT。你这地方不是面包嘛,所以这个名字呢,你可以自己来定义。能理解,但是我们的面包只能有一个啊,面包只能有一个,只有在面包里面的这些文件最终才能形成一个可执行文件,能理解我的意思吗?啊,它才能编译成一个可执行文件。好,那么我们来看看怎么编译,大家看这里说明一下,我们演示一个案例啊,来看一下我们怎么把一个就是带带有这个项目结构的这种这这种构浪程序进行编译呢?
06:20
同学们看,刚才我们在使用的时候,其实我一直是这样go round的。我这样勾状,其实呢,这样用其实并不是一个很规范的使用方式,大家都知道我在前面。我在前面实际上是讲过的,我这样使用就纯粹是为了讲课方便,但是实际上在真实的开发中,我们不可能去勾让一个源代码。对不对?实际上我们是需要把这个源代码生成一个可执行文件,然后交给别人去使用,是这个意思吧?那么我们就来看看如何编译呢?编译成一个可执行文件好不好?呃,思路非常的简单,大家看啊。
07:00
我们在编译的时候应该这样编译编译指令,首先我们要切换到项目所在的目录。就是说你不要你不要在这个地方编译了,直接切换到我们的这个go pass路径。这个地方下面去进行编译,编译的时候呢,它是编译时需要编译面包所在的文件夹,因为这样才能这样才能生成一个点exe文件。当然,如果你是在Linux下面呢,它也会,它也是要求在面包所在的文件夹去编译这个,这个文件夹才会生成一个可执行文件。好项目的组织结构最好按照规范来来来做,什么规范前面我讲过了,就是。这个路径下边写个SRCSRC,下面写我们的项目名称,项目名称才是我们的各个包名,是不是这样这样子来做的好,那么当我们编译过后呢,我们可以生成,注意听编译生成过后可以生成一个可执行文件,而且它会放在go pass路径下面。
08:06
编译的路,编译的方式是这样子的。是go pass-O-O呢,哎这种我我说一下啊,注意听。编译的指令是go pass,杠O后面可以带一个B,这样呢,会你也可以指自己指定一个可执行文件的名称,当这样编译成功了以后啊,大家看路径。它是指在这个命,命这个包所在的这个路径。那么这个卖点exe呢?是我指定的名字,如果你不指定,就会默认生成main.exe文件,能理解吗?这样你生成这个可执行文件过后,你就可以交给对方去使用了。OK,好,同学们来吧,我们给大家演示一下这个怎么玩,大家看我们现在呢,直接在这个钩状是不标准的,这样直接运行没有没有什么实际的。没有实什么实际的用处,因为你不可能把原代码给对方,对吧?那我们怎么来做呢?CD点点,CD点点CD点点CD点点CD点点好了,同学们看现在我在哪个目录,目录下面是在D盘的go project目录,也就是我们的什么目录目录go pass目录。
09:17
还记得吧,那这个时候我们怎么来正确的使用呢?正确的使用呢,非常的简单啊,非常的简单来看。非常的简单。我们给大家看一下这里。哎,我们给大家看一下这里。这边还会生成一个这个文件,好,那后面再说,那大家看到我们来进行一个。这种编译go build。GOGOGO的,然后呢,写上这个路径,路径应该从哪里写?刚才我们已经讲过了,从src的那个项目名称开始写,那就是go。Cold。记住这个路径斜杠,斜杠什么呢?我我我还记不住了啊,我也记不住了,Go pass这个地方。
10:04
啊,Go code下面有CHAPTER06。CHAPTER06CHAPTER06没问题吧,然后零六下面是我们的哪个路径。Function demo01 fun demo0一下面的面包。回撤编译。好,同学们注意听,编译完了过后我们看一下,此时此刻就生成了一个论点,Exe文件,这个文件你看很大。大概1.9兆,这个文件大概很大,大概1.9兆,这个1.9兆就是同学们,这个就是可执行文件了,我们把这个可执行文件交给需要使用的那个服务器,或者交给我们的这个这个客户,那么他就可以运行它了,来我们运行它一下。点exe看运起的效果跟原先是一样的,这就是个可视性文件,看到没有,当然我们还可以呢,这样子做,说老师我在编译的时候能不能指定自己的名字呢?可以,你这样写杠O。
11:05
甚至你可以告诉他,我把这个可执行文件放在并目录下面,我写个MY.exe这句话的意思我解释一下啊,这句话意思就是说我编译这个这个项目。当然这个地方肯定是他是项目方式来进行这个管理的啊,那么我编译编译的时候呢,编译的是这个项目。这个项目呢,我只要只要指定到men就可以了啊,只要指定到men这个包就行了,然后呢,这个杠O代表输出,输出什么呢?把可执行文件放到当前这个目录下面的并目录下面,而且呢,名字叫做卖点exe。说清楚了没有?应该很很清楚啊,那当然有些同学就说了,说诶你下面不是没有那个B目录吗?没有B目录它会自动给我们生成来跑一个。大家看此时此刻并目录生成了,但生成点进去看啊,果然有个卖点,Exe这个文件,这个文件就是可执行文件,就是跟刚才是一样的,但是名字是你自己指定的,你也可以运行它。
12:10
一样的啊,你们可以来试一下CD到并目录。然后DR来我们运行一下,点E一样可以输出。这个相应的结果对不对,好同学们关于这个细节呢,我们就说到这儿,好,我把这一段细节啊,把这个说明呢,给大家放到笔记里面来,注意听啊,同学们注意听。我把这个细节放到笔记里面来。那么呃,包括整个这个这个流程,我们这儿呢,也有一个图示说明对不对,好,我把路径把这个东西给大家说一说。好,标一下。这是一个说明,那这里面我强调一点,就是哪一点,我想到这在路径的时候,这个地方就是在这啊,编译后会有一个默认文件名生成,在go pass路径下也可以指定名字和目录,比如说这个地方。
13:02
这儿。这个就是我们指定的,在go project下面,我们指定个并目录生成,我们卖给exe,后面是那个men men所在包的路径,当然我这个PPT呢,跟我讲的有点出入,因为我在准备的时候呢,我我我的项目是直接在下面建的。这个这个大家应该还是能反应过来的,对吧?这个应该能反应过来啊,我的PPT跟我实际写的那个路径有点出入,是因为我在这写的时候,我的测试项目是写到这,能理解吗?好,大家注意这个用法啊,好细节咱们就说完了。细节咱们就说完,还有一个细节我还要再强调最后一点,这个细节我就不记到BG里面来了,大家听我说,大家听我说,当你编译完了过后呢,它还会生成一个文件,这个文件一般人没有注意到,大家看一个。PKG文件夹。这个文件夹是什么呢?我们点进去看一下。勾诶,看到没有,下边零六看到没有,进去看到没有一个u ta有点意思。
14:06
他说这个文件我没见过呀,我告诉大家这个是一个库文件。这个是一个库文件,什么意思呢?就是大家知道我们这个项目本身有两个文件夹。一个是面包啊,面包一个叫UR,这个文件夹也是utr这个包,这个包下面是不是有一个这个。UGO这个文件啊,那么这个文件呢,当你编译完了过后,它会生,它会把这个文件里面的内容直接生成一个点A这么一个库文件,那么这个文件有什么好处呢?就是说这个文件你打开是看不到源代码的。大家看它是它仍然是个二进制码,我我打开过问大家看啊,它一打开过书乱七八糟的东西,这个我还我我我还打不开,我得用。16进制查看器,大家看这个这个代码。这这个你你肯定是看不懂的啊,它是二进制的东西,那有些同学老师,我这个有什么用处呢,听听我说。
15:04
勾浪语言它是这样子的,就是说它会把你其他包的文件生成一个点A文件,这个文件你就可以交给谁呢?你可以把它当做一个库文件交给对方,比如说小明开发了一个工具库。听我说小明开发了一个工具库,那么小明可以不把原文件交给对方,他直接把这个库文件交给小李,小李呢,把这个文件里他引入进去过后看了个文档。就能够调这里面相应的函数能理解吗?相当于是是一个库文件,当别人要用的时候,直接你可以把这个库文件交给对方,对方就可以用里面写的函数了,包括你写的calcul啊变量都可以用,你再给他出一份文档就OK好,这个呢,后面我们在写项目的时候,老师还会提到这个概念,就是库文件的概念,OK好,关于这一点呢,我们就聊到这里,聊到这里。好,那同学们关于包的这个注意事项和细节,我们就聊到这里,我觉得啊,只要你把老师讲的这七点就掌握了,我觉得也够用了,其他东西呢,也就不要再去。
16:09
过多的研究,因为做项目里面,我们主要只要注意到这七点,足足就够了。好,关于这个包我们就说到这里。
我来说两句