00:00
好的。现在呢,我们继续来说一下go语言的一个特点,对吧。那么我们学习一门语言。那么我们应该对这个语言的一些特点呢,有一些掌握和了解,对吧?那么我们来看看go语言它有什么特点呢?我总结了这么几点啊,大家看一下go语言呢,它既保证能够达到静态编译语言。它能够既能够达到静态编译语言的安全和性能,就是说静态编译语言大家都知道它安全性和性能都很强的,变成C语言对吧,速度很快,同时呢,它又可以达到动态语言开发维护的高效率,也就是说。这个go语言呢,具有静态编译语言的这个性能,同时呢,它也具有动态语言开发和维护的效率,就是说用它来做开发呢,非常的快。你比如说像像这个Python,大家都知道Python的这个开发效率是比较高的。
01:03
那么C语言的它的性能是比较高的,所以说我们如果用一个表达式来说来形容这个go语言的特点话呢,那就说go等于C加Python,也就是说它兼顾C这种静态编译语言的性能,同时呢,又具体像Python这种。动态脚本语言的开发效率也比较好维护,哎,这确实是这样子的啊,确实是这样子的,那么这说明说明各语言既有C语言静态的运行速度,又能达到Python动态语言开快速快速的开发,因此呢,这个语言它的这个在这两方面都做到一个比较完美的一个结合。哦,这是他的一个大致的介绍那。那有些同学说,老师那你没有说这个C语言的特点有哪些,那现在呢,我给他整理一下啊,有这么几个特点,第一点呢,从C语言继承的很多理念,包括表达式的语法控制结构,基础数据啊,基础数据类型,还有。
02:03
参数传值还有指针,诶大家看在构语言里面是有指针的。啊,同时呢,它也保留了C语言一样编译执行方式,以及弱化指针,因为指针比较难嘛,所以他对指针的性这个要求呢,有进行一点弱化,那你大家看到啊,我总结了这些语言特点,但是呢,干讲就是一点一点讲呢,呃,没有没有一个案例,大家没有一个直观的认识,所以说这样子哈,就说我呢一边讲一边。来给他写几个,呃,写写几个这个go语言的程序,大家呢,先感受一下,我们现在还不去真正的运行,我们只是把这个go语言的呃一个代码给它写一写,大家感受一下它的特点啊,来,那么现在呢,我们把这个笔记补一补。好,现在我们在讲什么呢?我们现在呢,在给同学们介绍go land。Go nine。
03:02
的一个语言特性。他的语言的一个特点。Go语言的特点。好,我们把它整理到这里来啊,我们把它整理到这里来,好,来给大家一个标题二。那刚才呢,我们有一个基本的介绍,我们做了一个介绍啊。简介了一下构应源的特点,构源有哪些特点呢?刚才在这里我们做了一点说明,对吧?做了一点说明,我们先把它放到这里来。呃,我们做了这么一点说明简介。对吧,我做了一个简介。说这个够语言了。好,我们来给它一个小箭头吧。构语言。它有这个静态编译语言的安全和性能,这是第一个特点,第二个呢,它具有动态语言开发和维护的高效率。那换言之就是各语言有一个公式可以比较形象的来说明它的特点,就是C加Python,虽然这个描述不是特别的准确,但是呢,也能说明它的一个特点,对吧?说明它的特点好,下面呢,我们来看看他的第一个特点。
04:12
那么我们呢,就顺带就开始要举例子了啊同学们,那么每一个案例呢,我们来给大家看一下它的特点。诶,看一下它这里。那看第一个。看第一个特点啊。呃,这个C这个go语言呢,因为它从C语言继承了一些理念,所以说呢,它有指针。它有指针,那我们看看这个指针它是怎么用的,给大家举个例子。我给大家举个例子啊,举一个案例。大家先体验一下这个案例呢,我们不去运行它,就让大家体验一下。体验版啊,就是就做一个小小的体验版就完了,但大家看我把我把这个地方打开一个编译工具叫Vs code,这款工具呢,后面我们会,呃,这是个开发工具,到时间呢,老师会带同学们来安装这个Vs code的啊,大家不要着急,先体验一下,我们先把它打开。
05:11
打开,我们来写这么一段代码,看看指针是怎么用的,体验一下。好。我就在这里面写一个,写写一段代码啊,我们来体验一下。Go。语言的一个指针。指针的使用。对吧,指针的使用特点。呃,那么怎么来使用呢?干脆我们就写一个小函数,如果你是零基础,大家现在呢,可能有点听不懂我说了啊,我这儿只是一个体验版。大家呢,也不用特别去纠结,就体验一下。因为如果我不举案例,如果我不举一个案例啊,同学们,我很干的把这个语言特点给大家念一遍呢。说实话没什么意思,所以说呢,我还是想举那么一个案例,让他有个直观的感受,咱们用代码呢,来。
06:02
表达出它的一个特点,对不对?好,我写一个案例啊。来吧,写一个function,先体验一下test。Pointer。一般是这样写啊,指针它是PTR一个简写pointer简写,那比如说现在呢,我有一个。Number。In,注意啊,同学们看。同学们看这个在构语言里边啊,它是把变量。写在前面,把数据类型呢写在屁股后边,你看怎么写指针呢。星号,哎,你看这就是一个指针类型,那么要用的时候怎么使用呢?非常简单,我要给它附一个值20,你看这个就是一个构圆指针的一个使用特点,你看它可以接收一个指针。然后呢,用新这个符号来取得指针所指向的指,然后进行这个复值操作,这个就是一个指针的使用特点,好,我把这个特点呢,给同学们放到笔记里面来啊,好把这个代码。
07:07
给它搁在笔里面去,大家有个直观的感受。好的。啊,这是第一个特点,那么我们再来看看构引圆的第二个特点,它有个包的概念。哎,这个有点意思啊,同学们。就是说包这个概念呢,在很多编程语言里面其实都是有的,你比如说我讲Java里边它有它,它也有包,那么我们要给他讲一下这个构语言呢,它引入这个包的概念,它是用来做啥的,它是用来进行组织程序结构的,换言之就是说我们后面的项目。它实际上是以包的形式来进行管理的。所以说这里面有句特别重要的话,大家要有一个体验啊,就是说go语言的每一个大家看到。Go语言的每一个文件都要属于一个包,而不能单独的存在,这是它的一个特点。
08:00
啊,这是它的一个特点,就是说它必须属于一个包。如果一个文件不属于一个包,那它就编译不过去,说go语言的每个文件都要属于一个包,不能独立存在。那么我给他举个例子,你看刚才同学们看我们这个文件,我再新建一个别的文件吧,比方说我新建一个文件叫test。够啊。那么我。我写一个函数,我随便写一个函数啊,Function。比如说就叫COK。这面呢,我们就输出一句话,输出一句话。好简单一点啊。说。说出一句话,Printt能。OK,好,那么这个这个输出这样一句话过后呢,同学们看到,当我保存以后,当我保存以后啊,同学们看。这一段他是要报错的,为什么说要报错误呢?大家看这里,他说没有一个什么呀。Package,也就是说你这个文件呢,要属于一个包。
09:01
啊,那么这个时候我们就给他打一个包package,至于这个包是什么,那就根据实际情况来说了,所以说这里面说的啊,就是说一个go文件个文件需要在。一个包中看到没有,哎,他需要干再一个包中,同时因为这里面有一个。Format format呢它是一个包,所以说我们还要引一个包,不然的话它还是编译不过去的啊,引一个包很简单,引包FT保存一下,好,这个代码呢就编译过去了,对吧?好,这是先体验一下啊,我们还没有具体的讲解。所以说从这里我们可以看出来是要属于一个包的,对吧?好,我把这个呢,也给同学们放到笔记里面来,就是我们讲的它的第二一个特点对不对。包的特点。那么我们看各语言还有什么特点呢?第三个特点,第三个特点就是它引入了垃圾回收机制,注意啊,这个在C语言里面去。
10:01
这个内存的回收是要程序员自己来管理。但是go语言呢,它。他的这个垃圾回收机制呢,是自动回收的,不需要开发人员管理,这一点是特别好的,呃,像如果如果是你做过C开发的,你就知道这个内存回收啊,是很麻烦的一件事情,稍微不注意就会出现什么呢,就会出现这个内内存泄露。啊,内存泄露,这个内存泄露啊,很快就能把你的内存给吃光,明白这意思吧,所以说各语言呢,它借鉴了C的一些东西,但是同时呢,也对C进行了一些优化和处理,比如说引入垃圾回收机制,那这样子的话呢,程序员就只关注业务逻辑,而不再关注怎么去回收这个内存呢,你直接用就行了,明白好,那现在呢,这有一个特点,就是垃圾回收机制引入了。引入了一个垃圾回收机制,让我们程序员呢,更关注于这个逻辑本身,好,我写这这个就没办法举例子了啊,这个我就不举例了,我们再看第四个特点,天然的并发,OK,这个特别好。
11:09
这个可以说是构语言的一个很重要的一个特点,很重要的一个特点,重要特我把它标出来,为什么说这样说呢?大家都知道啊,我们说这个构语言,它在刚开始设计的时候,它本身就是冲着能够。有效的利用我们多核多CPU这个特点,那多核多CPU你最终引用起来就是要处理大并发嘛,对不对,处理大并发,那么我们这个go语言构语言呢,它在设计的,在设计的时候从语言层面就直接支持并发,而且实现特别简单,因为它引入了一个叫做呃。这个告叫做这么一个概念,是个轻量级的线程,而且可以非常轻松的实现大并发。高效的利用多核。这个是他一个特别特别好的一个特点啊,特别特别优的一个特点,而且呢,它是基于这个CPS并发模型执行的,那关于这个天然并发,你就记住一点,你就记一句话就行了,什么话呢,够语言支持大并发做的非常的到位,支持上千上万个并发。
12:16
就小儿科啊,他从语言层面就直接支持,那么如果你是像C语言或者Java语言在这方面呢。可能是赶不上购物员的这点,后面同学们在使用这个购物员的时候会有更直观的感受啊,更直观的感受。当然了,你也要。使用得当,如果你使用不得当的话,那也不行啊,这个所以说天然天然这个并发天然支持并发的啊,好这个特点呢,我们也把它拿到笔记里面去。这个我就先暂时不举例啊,暂时不举例,因为它涉及到这个叫做GR的一个知识点,我们后面再详细说。好的,这是这么一个一个点,我们再来看第五一个特点,第五一个特点呢,它吸收了一个管道通讯机制,叫channel channel这时候管道,那么go语言的管道,其实也就是说它要解决一个什么问题呢?它要解决这个GR的之间的相互通讯问题,他用的是channel这个管道来实现的,后边呢,我们在写代码的时候会详细给大家举例,现在我先暂时不举例啊,不然的话。
13:24
这个很多同学听到这,因为你突然一下来一个这个管道,听起来就比较。怎么说呢,蒙圈了,所以说后面我们会有一个专门的章节来去讲解管道通讯机制,也就是说要讲一下圈是怎么回事,那这块呢,我们先把它拿到这个笔记里面来。好,也就是说它支持这个管道通讯机制,那么第六一个呢,有点意思了,它支持什么呢?返回多个值。就说函数。函数。可以返回多个值。
14:01
多个值,那么这个呢,我给大家举个例子说明一下,这个比较好理解,我先举个例子啊。那比方说现在我有一个函数,同学们看啊,我写一个函数。我就随便写一个函数了啊方式,比如说这个函数呢,我要让它返回两个数的和,和两个数的差,就是写一个函数实现。同时返回。这个和和差。两个同时返回,呃,大家想一想,如果是传统的,传统的这个,呃,咱们的这个编程语言,呃,我们知道是只有一个返回值的。如果你要返回两个值,大家想一想你是怎么实现的?你是不是?用一个数组啊。对不对。你是把你要返回的结果封装,封装到数组里面再返回,但是呢,Go语言可以直接支持返回多个值。啊,就说go。
15:01
Go函数。函数。可以可以直接支持啊,支持返回多个值,那么我给大家写一段体验代码,比方说现在我有个函数叫get。Get什么呢,上?和an的sub差,好,我让他传两个数进去啊,我要传两个数一个,一个是NUMBER1 N1吧,In再来一个N2。In,好,同学们看,返回的时候有两个字怎么写呢?返回的值的列表,这样写就行了。写两个,我要返回一个int,还要返回一个int,看,这就是它的两个返回值的列表。然后呢,各位,然后。换行,我们看看怎么处理啊,我把两个数的和求出来。上。等于N1加N2,注意没有分号啊,就是构与元后,构与元后面不用代数啊,构语句后,构句后面不用。
16:07
啊,不用带分号。为什么不用带呢?其实不是说不带,而是。呃,编译器它会自动给你带上这个分号,因此呢,你就不要画蛇添足了啊,不要画蛇添足了,Sub。等于N1对不对,减去N2,诶,这就是两个值,那怎么返回呢?这样返回就行了。非常简单,看到没有,这个就是返回了。两个值,一个是sub和一个是啊,一个是sub和一个是sub,是它两个数的差对不对?好,你看这就是他的一种新的特点,就是返回多个值,那么我把这个体验代码呢,也放到我们的笔记中去。好,这是第六一个特点,看清楚没有第六一个特点。好。嗯,这段代码呢,我代码我可以把它标成另外一种颜色,对吧,大家一看就知道哦,是蓝色对不对,蓝色加粗一点,这样看着更清晰啊,加粗放弃,好,我们再看它第第七个特点。
17:09
这个地方呢,是它的独有的一些语法现象了,比如说像go语言呢,它。增加了一个切片。听起来很高大上啊,前面就这个slash。那么这个切片呢,其实就是你可以理解成是动态数组。啊,有点类似于像我们Java语言的像这种集合,哎,有点像这种集合的概念啊,还有呢,它为了能够在函数中及时的或者说方便的回收资源,它增加了一个叫D。Defer的这么一个关键字,可以延时执行啊,就是你函数执行完毕过后,我再去执行dinner啊,这个defer里面的这些语句,所以说呢,它增加了一些新的语法现象,比如像切片,还有这个延时,这是它的一些新的创新。
18:01
啊,新的创新,好,我把这个特点呢,也放到笔记里面了,对不对。那同学们看啊,嗯,关于go语言的特点呢,我就总结了这么七点,尽管我们现在还没有对每一个特点展开讲解,大家呢,多少能够体验体现出呃,或者说体验到我们的这个构语言的,呃,跟别的语言有些差别的地方,说白了就是什么特点呢?大家看到它既有编译型语言的速度,又有动态开发语言的开发效率,这是它的。一个总的一个总的一个特点,然后呢,它也有一些静态语言的,像这种呃指针啊什么的东西,对吧,它也有像我们Java里面的包的概念,用包呢来管理我们的这种程序,管理我们的项目,同时呢,诶,它还有垃圾回收机制,还天然的知识并发,这个是它的一个重要特点。后面大家呢,呃,可以感受到这个这个它的一个优势,为什么前面我们讲到很多后台的服务程序云计算。
19:06
很喜欢用构语言,就是因为它的并发性处理的是非常到位的啊,后面大家会有一些直观感受,然后呢,函数可以支持多个值等等,还有一些自己新的创新,那同学们那关于go语言的特点呢?我先给同学们介绍的这些好不好?
我来说两句