Go语言从入门到精通全书教学课件.pptx

上传人:zf 文档编号:30838503 上传时间:2024-01-30 格式:PPTX 页数:725 大小:6.60MB
下载 相关 举报
Go语言从入门到精通全书教学课件.pptx_第1页
第1页 / 共725页
Go语言从入门到精通全书教学课件.pptx_第2页
第2页 / 共725页
Go语言从入门到精通全书教学课件.pptx_第3页
第3页 / 共725页
Go语言从入门到精通全书教学课件.pptx_第4页
第4页 / 共725页
Go语言从入门到精通全书教学课件.pptx_第5页
第5页 / 共725页
点击查看更多>>
下载资源
资源描述

Go语言从入门到精通全书教学课件.pptx

《Go语言从入门到精通全书教学课件.pptx》由会员分享,可在线阅读,更多相关《Go语言从入门到精通全书教学课件.pptx(725页珍藏版)》请在冰豆网上搜索。

Go语言从入门到精通全书教学课件.pptx

,第1章Go语言简介谢琼Email:

Go语言,从入门到精通,03了解Go语言的主要特点,RISE&FALL,了解Go语言出现的背景与最初的目标HISTORY了解Go语言至今的发展历史和趋势,OUTLOOK,目标target,目录导航,1.11.2,Go语言的发展历史Go语言的主要特点,Contents,Go语言名字(Golang)的由来,go.org无法注册,已被占用?

go这个关键字搜索结果不易找到?

Go+language=Golang,Go语言的官网golang.org,是Go语言的Logo和吉祥物,Go语言的吉祥物Gopher,一只可爱的小地鼠,Go语言的诞生,Go语言大约从2007年开始构想,最初是由谷歌公司的工程师RobertGriesemer、RobPike、KenThompson等人设计的。

2008年,RussCox加入团队中来帮助将Go语言及其标准库从原型设计转化为实际成品。

Go语言产生的背景,Google(谷歌)公司的研发大量使用C+代码以及部分Python和Java代码;编译速度慢发展得越来越复杂的面向对象特性导致代码臃肿,效率难以提升;很多特性只有极少数开发人员在极少数情况下才会用到交叉编译(跨平台)困难依赖管理容易混乱,Go语言的设计初衷与目标,解决当时较流行的C+、Java等开发语言过于复杂而低效的问题;(为了规范而复杂、为了完整但其实不必要或不常用的功能而复杂)这些开发语言发展到了一定阶段后,所选的进化路径导致语言本身和相关的类库越来越复杂,甚至到了给开发者带来不必要的困扰的地步。

Go语言的设计者们希望能够用最简约的方式来避免这些困扰;同时也希望Go语言能够内置一些更高效便捷的能力,例如处理并发事务的能力、利用多核CPU的能力等。

Go语言的阶段性版本历史,2009年11月10日,Go语言被正式转为开源项目,这一天也被认为是Go语言正式的诞生日。

2012年,Go语言发布了第一个正式版本1.0。

到2021年2月,Go语言发布到了1.16版。

Go语言的大版本2从2017年开始已经在构思和讨论。

Go语言受喜爱的程度,2018年,根据著名开发者问答网站StackOverflow的用户调查,Go语言排入了最受欢迎和最需要的计算机语言中的前5名;在知名软件开发工具提供公司ActiveState的调查中,36%的用户对Go语言“极其满意”,61%的用户“非常满意”;在另一家软件开发工具供应公司JetBrains的调查中,Go语言获评“最有前途的计算机语言”。

Go语言最新的排名,作为以后端和网络开发为主的Go语言来说,是相当不错的成绩,目录导航,1.1,Go语言的发展历史Go语言的主要特点,Contents,Go语言的特点概括,Go语言是一门编译型计算机语言,性能上接近于C、C+等语言的快速,编程时的便捷程度又接近于Java、Python等高级语言。

具备功能完整的标准库(除图形界面开发外),并特别对并发处理、多核CPU负载等问题作了优化。

Go语言主要的优点,轻量级:

Go语言自身的编译器和附带工具相对来说都不算大,编译出来的程序也只带有少量的类似垃圾清理、内存分配、并发管理等基本功能的运行时库功能完备:

提供丰富的标准函数库,支持高性能服务端的快速开发。

标准库中涵盖了服务端编程所需的常用功能,几乎可以不依赖任何第三方包,就能够进行大多数项目的开发。

Go语言主要的优点,免费开源跨平台,支持交叉编译语法简约而严谨,避免常见编程错误高效的原生并发处理机制(Goroutine)独特的指针操作、内存管理和自动垃圾回收机制通过Cgo方式直接调用C语言函数,可以利用大量已有C语言库,Go语言的一些缺点或争议,颇有争议的异常处理方式图形界面(GUI)编程功能较弱语法有时过于严苛不支持泛型特有的通过大小写字母来确定包内函数或对象成员是否可被公开访问的特性有待商榷,互助互利共同进步,Go语言从入门到精通,第2章Go语言开发环境准备谢琼Email:

Go语言,从入门到精通,准备进行开发所需的环境简要了解GoModules,01INSTALL,02ENVIRONMENT,03GOMODULES,目标target,目录导航,2.12.22.3,安装Go语言打造更舒适的开发环境Go语言开发工具的选择,Contents,从官网下载Go语言安装包,选择合适的操作系统版本,其他地址下载Go语言安装包,也可以从其他网站下载,安装步骤1(以Windows版为例),一般来说应该安装默认的64位版本,安装步骤2,如果存在已经按转的旧版本,会提示先卸载旧版本,安装步骤3,同意许可协议,勾选后继续下一步(next)即可,安装步骤4,选择安装路径,一般默认路径即可,Go语言安装后也只占据几百M的空间,安装步骤5,点击Install按钮进行安装即可,确认后面Windows的安全提醒,安装步骤6,安装结束,安装步骤7,安装结束,安装后的验证,安装结束进行验证:

运行Windows的“命令提示符”程序Linux和Mac下直接在“终端”程序中验证,安装后的验证,输入goversion命令显示go语言目前的版本,即可达到验证目的,设置所需的环境变量1,并非必须,但最好设置,打开Windows的“设置”或“控制面板”,选择“高级系统设置”,设置所需的环境变量2,选择“环境变量”进行设置,设置所需的环境变量3,设置GOPATH变量,设置所需的环境变量4,也可以通过命令提示符设置GOPATH变量,命令提示符一般也称为“CMD”(英文版的名字,以前的名字),设置所需的环境变量5,当然也要在硬盘中建立相应的文件夹(目录),文件夹和目录在开发中可以看做是等价的,设置所需的环境变量6,将GOPATH下的bin目录也加入PATH环境变量中,PATH环境变量的作用:

快捷执行程序,设置所需的环境变量7,为避免涉及Go语言的模块管理,设置环境变量GO111MODULE为off,学习初期避免头绪太多干扰主线,Go语言在Linux与MacOS操作系统下的安装,Linux系统下安装Go语言MacOSX系统下安装Go语言,关于GoModules,Go语言从1.13版本之后采用了GoModules作为默认的包管理方式GoModules相对比较复杂,对于Go语言初期的学习并不是很有利设置环境变量GO111MODULE为off可以关闭GoModules功能为避免学习初期头绪太多,本书的内容都是在GoModules功能关闭的情况下适用更多的说明可以参考这里:

http:

/localhost/cache/6020240044004122/png/topxeqgoexamples,目录导航,2.1,2.3,安装Go语言打造更舒适的开发环境Go语言开发工具的选择,Contents,打造更舒适的Go语言开发环境,修改Windows资源管理器的一些显示设置;使用Cmder或Terminus等终端软件代替命令提示符使用更好的文本编辑软件编写Go语言代码,目录导航,2.12.22.3,安装Go语言打造更舒适的开发环境Go语言开发工具的选择,Contents,Go语言开发工具LiteIDE,专门针对Go语言开发的软件(IDE)跨平台安装使用非常简单内置很多Go语言的工具首选开发软件,Go语言开发工具VSCode,需要安装Go语言插件,互助互利共同进步,Go语言从入门到精通,第3章Go语言快速入门谢琼Email:

Go语言,从入门到精通,快速掌握Go语言的基本写法,运行起第一个Go语言程序快速浏览Go语言的基本要素,为下一步深入学习做准备,01GRAMMAR,02HELLOWORLD,03BROWSE,目标target,目录导航,3.13.23.3,初识Go语言编写、编译和运行Go语言程序的组织关键字等语言要素,Contents,Go语言程序源代码文件的存放位置,与环境变量GOPATH相关如果GOPATH设置为C:

goprjs,那么源代码都将在C:

goprjssrc下的不同子目录中,Go语言代码文件的命名,Go语言代码文件的文件名后缀(扩展名)为.go名字可以任意取系统允许的文件名,Go语言代码文件的输入1,使用LiteIDE集成开发环境,Go语言代码文件的输入2,输入Helloworld!

程序代码实际上,使用任何文本编辑器都可以编辑Go语言代码,Go语言代码文件的编译1,使用gobuild命令进行编译,得到可执行文件hello.exe,Go语言代码文件的编译2,goinstall命令将在GOPATH/bin(即C:

goprjsbin)目录下生成可执行文件hello.exe,Go语言程序的执行1,直接运行Go语言编译后的可执行文件,Go语言程序的执行2,运行GOPATH/bin目录下的可执行文件,需要事先将GOPATH/bin加入到环境变量PATH中,Go语言程序的执行3,直接用gorun命令运行代码,验证gorun执行的机制,gorun的本质是先编译后执行,packagemainimport(fmtos)funcmain()fmt.Println(Helloworld!

)dir,_:

=os.Executable()fmt.Println(dir),查看Go语言文档1,goget-vgolang.org/x/tools/cmd/godoc新版Go语言默认不安装godoc,需自行安装,运行godoc命令后,用访问本机的6060端口,查看Go语言文档2,访问官网的文档:

http:

/localhost/cache/6020240044004122/png/doc访问标准库和第三方库的文档:

http:

/localhost/cache/6020240044004122/png/,目录导航,3.1,3.3,初识Go语言编写、编译和运行Go语言程序的组织关键字等语言要素,Contents,Go语言中的程序文件的组织方式,目录包文件,main包的作用,main的包是一个特殊的包,表示该包编译后会生成一个可执行文件;如果要编写一个能够被编译成可执行文件的程序,则代码必须是在main包中main包中可以使用其他包main包中不论有多少文件,其中的main函数有且只能有一个,main包中的main函数,引用其他包的方法import调用其他包中的函数包名+“.”+函数名,fmt是标准中的一个包,主要用于输入、输出信息,main包中的main函数,packagemainimport(fmt)funcmain()fmt.Println(Helloworld!

),main包内main函数调用其他文件中的函数,main.go文件packagemainimport(fmt)funcmain()hello(),main包中的其他文件,sub.go文件,小写开头的函数可以在本包内被访问,非执行包,packagepackage1,import(,fmt,),funcHello()fmt.Println(Helloworld!

),包名,只有首字母大写的函数和变量可以被其他包访问,package1/package1.go文件,调用非执行包,packagemainimport(package1)funcmain()package1.Hello(),包名+“.”+函数名,hello/main.go文件,调用非执行包,非执行包目录名与包名可以不一致但不建议这样做,最好一致以避免混乱,用多级子目录组织有关联关系的包,目录导航,3.4,3.2Go语言程序的组织关键字等语言要素变量,Contents,关键字(保留字),“关键字”(keyword)的概念,有时候也叫做“保留字”(reservedword),目录导航,3.5,3.3关键字等语言要素变量表达式,Contents,变量的概念,变量就是编写程序时存放数据的地方,由于存放的数据可以随时改变,所以叫作“变”量(variable)Avariableisastoragelocationforholdingavalue.,变量的类型,整数0,1,99,-30小数2.3,-19.6*小数在编程中一般称为浮点数文字(又称字符串):

abc,天气真好布尔(boolean)类型:

true,false*布尔类型只有两个相反的值,可以对应真/假、是/否、对/错等对立的概念,变量名与变量值,变量名只是一个记号,标志着一个存放数值的地方,变量值才是指其中实际存放的数据的取值,变量声明与赋值,声明一个整数类型的变量a令a等于10,等号“=”在编程中的意义,数学中,“=”等号表示相等编程中,“=”表示赋值,即让左边的变量中的值为等式右边的值数学上是错误的编程中却是常用的正确写法最后输出11,Go语言中变量的快捷声明与赋值方法,:

=操作符的含义Go语言自动根据后面的数值推测该变量的类型,然后进行赋值,小提示:

Go语言每条语句后无需加分号“;”,变量不能重复声明,包括用:

=操作符的短声明,下面的例子实现了交换变量a与b的数值的作用a:

=18b:

=33a,b=b,afmt.Println(a,b),多个变量同时赋值,浮点数类型的变量,计算机中对数学中的小数一般称作浮点数通过小数点的浮动来表示更大范围的小数Go语言中浮点数有两种:

float32和float64float64更被推荐使用,浮点类型变量示例,同时声明多个变量,多个变量同时赋值,同时赋值多个变量在Go语言中也是允许的,字符串类型的变量,字符串变量的声明类型是string字符串变量的赋值要加双引号字符串变量也支持用:

=简化声明并赋值加号“+”表示连接前后两个字符串,布尔类型的变量,变量b的值将为false,布尔变量的声明类型是bool布尔变量只有true或false两个可能的取值!

操作符用于将布尔值“取反”,即如果是true则变为false,反之亦然,正确的变量命名,xmyFirstNameplan_for_2017,错误或者不建议使用的变量命名,12变量名字不能用数字开头codeName张三变量名字最好不使用中文a#6变量名字不能含有大多数英文字符和数字之外的特殊字符,建议最多只用下划线“_”,thisredapple变量名字中不能有空格,复合类型变量切片(slice),切片用于在Go语言中表示一组数值Go语言的切片类型融合了其他语言中的静态数组(固定长度)和动态(可变长)数组的特性,切片的声明、分配空间和赋值,切片有类型之分,给切片中的某一项赋值,小提示:

这里切片的用法类似其他语言中的静态数组,给切片增加数据项,append用于向切片末尾增加数据项,从切片中截取数据项,subAry将为4,8,小提示:

截取时不写左边的索引数字表示从头开始,不写右边的表示截取到末尾,从高级截取与合并,append第二个参数加,表示将整个切片添加在ary的末尾,subAry最终的结果将为2,4,8,2,4,复合类型变量映射(map),映射用于表示其他语言中常称作字典(dictionary)的复合数据类型通常由字符串来进行索引,这个字符串被称为“键(key)”而由该键所索引的位置里存放的具体数据就叫做“值(value)”映射是由一个个“键值对(key-valuepair)”组成的,映射的声明、分配空间和赋值,键值对小提示:

映射类型分配的空间会自动增长,并非上限,映射的声明、分配空间和赋值,Go语言特色用法,变量ok将是值为false的布尔类型变量,其他复合类型,Go语言中还有自定义数据类型(struct)和用于并发处理的通道类型等,将在后续介绍,严格的变量类型控制,int(整型)和int64(64位整型)居然不能相加,变量类型的转换,可以互相转换的类型,直接用类型名加括号的方式就可以转换,错误的变量类型转换,Go语言编译器不知道怎样将float64类型转换为布尔类型,float64类型与布尔类型不相容,Go语言中的指针类型变量,相较于C/C+语言中的指针做了一定的改进,主要是相对更安全,p是int类型的指针变量取变量a的地址向指针变量p指向的地址内赋值最后变量a中的值为20,指向复杂类型变量的指针,切片也可以这样简化声明并赋初值指向int类型切片的指针变量向指针变量p指向地址的序号为1的项赋值最后变量a中的值为1,8,3,仅声明但未经赋值的变量中,保存的是“零值”(zerovalue)数字的零值一般为0字符串的零值是空字符串布尔变量的零值是false切片和映射的零值是空切片或空映射指针变量的零值是空指针nil,变量的零值,目录导航,3.6,3.4变量表达式函数(方法),Contents,计算机编程中指的是一连串用运算符或操作符连接各个数值组成的式子其中的数值也可以是变量或函数,只要最后能够计算出某个值表达式可以嵌套表达式通过计算最终可以得到一个值,叫做表达式的值单个数值、变量、函数也可以看作是表达式,表达式(expression)的概念,表达式的最主要的用途,Anexpressionspecifiesthecomputationofavaluebyapplyingoperatorsandfunctionstooperands.a=a+1,表达式,变量,变量的作用是保存数值,表达式最终可以计算出一个数值,因此表达式可以被赋值给变量注意:

返回多个数值的函数可以被看作数组或切片的复杂类型数值,表达式中的括号,a*(12-b)改变运算的优先级13-8-(6+3)编程中不能使用数学中的方括号或花括号13(8-(6+3)使用嵌套的圆括号是正确的写法并且可以多级嵌套,目录导航,3.7,3.5表达式函数(方法)自定义数据类型,Contents,函数,函数的主要作用是将输入的参数进行一定的运算处理后形成输出的结果。

输入参数和输出结果均可以是零至多个,调用函数,Go语言安装时就附带了标准库,其中的函数可以直接使用(仅需先导入相应的包),包名,函数名fmt.Println(1+2),输入参数这里是一个表达式,最终会计算出一个值,因此是一个参数,调用函数,Go语言安装时就附带了标准库,其中的函数可以直接使用(仅需先导入相应的包),函数名fmt.Println(1+2)包名输入参数,这里是一个表达式,最终会计算出一个值,因此是一个参数,该函数将输出3,定义的函数调用时无需加包名,自己编写函数,编写函数的最主要的目的是为了减少重复,劳动,packagemainimport(fmt,)funcaddTwice(aint,bint)intreturna+b+bfuncmain()c:

=addTwice(1,2)定义函数的方式fmt.Println(c)小提示:

同一个包内,调用函数并利用其输出值/返回值的方式,自定义函数的注意事项用关键字func开始自定义一个函数;函数的名字与变量命名的要求基本一致;函数名后面圆括号中定义了本函数接受的各个输入参数及其类型;如果函数有输出值(返回值),在函数圆括号后应标明返回值的类型;函数内部的所有代码应包含在一个花括号(大括号)中;如果函数有返回值,必须至少有一条return语句来返回结果值,每一个return语句都是该函数代码执行的终结点,意味着return语句返回结果值后将不再往下执行其他代码。

如果函数没有返回值,也可以用不带返回值的return语句来返回(强制终止函数的运行);,返回多个结果值的函数,packagemainimport(fmt)funcswapNumber(a,bint)(int,int)returnb,afuncmain()n1:

=1n2:

=2n3,n4:

=swapNumber(n1,n2)fmt.Println(n3)fmt.Println(n4),“废弃”函数的返回值,packagemainimport(fmt)funcswapNumber(a,bint)(int,int)returnb,afuncmain()n1:

=1n2:

=2n3,_:

=swapNumber(n1,n2),fmt.Println(n3),使用下划线,Go语言的内置函数,预先定义好,无需引用/导入任何包,例如println,目录导航,3.8,3.6函数(方法)自定义数据类型面向对象编程,Contents,typeMyIntintfuncmain(),varaMyInta=10b:

=MyInt(12)c:

=a+b使用时需要转换,自定义数据类型,用type关键字来定义新的数据类型,typePersonstructNamestringGenderstringAgeintfuncmain()varaPersona.Name=张三a.Gender=男a.Age=25,自定义复合数据类型,用type加struct关键字定义复合数据类型类似C/C+等语言中的“结构体”用结构变量名+“.”+成员变量名来访问,typePersonstructNamestringGenderstringAgeint,funcmain()a:

=new(Person)a.Name=张三a.Gender=男a.Age=25,new关键字的应用,新建一个结构指针(引用)并分配空间,此时的a是指针类型的变量,typePersonstructNamestringGenderstringAgeintfuncmain()a:

=new(Person)a.Name=张三a.Gender=男a.Age=25fmt.Println(a),new关键字的应用,新建一个结构指针(引用)并分配空间,此时的a是指针类型的变量,将输出&张三男25,目录导航,3.9,3.7自定义数据类型面向对象编程条件判断与分支,Contents,面向对象编程的基本概念,对象是对事物进行分类的一种方法一般来说,对象类表示分类,例如“人”、“男人”;对象实例(有时候也直接简称为对象)代表对象类中的具体个体,例如“小明”、“张三”等每个对象类都可以包含属性和方法,例如“人”都有“名字”这个属性,也有“走路”这个方法,而具体对象实例“张三”的名字属性的值就是“张三”面向对象编程是在编程的设计和编码阶段,把所有涉及到的内容均看作一个个“对象”来处理的方法论,Go语言中面向对象的实现方式:

声明对象类数据,typePersonstructNamestringGenderstringAgeint先定义数据结构,也就是定义对象类的名称(Person)和对象类的成员变量们,func(p*Person)say(sentencestring)fmt.Print(p.Name,says,sentence,n)func(vPerson)getAge()intreturnv.Age,定义成员函数,再定义对象类的方法,也就是定义对象类的成员函数们,funcmain()person1:

=&PersonName:

Tom,Gender:

male,Age:

25person1.say(Hello!

)person1.Name=Jerryperson1.say(Hello!

),Go语言中面向对象的实现方式3,然后就可以创建对象实例,访问对象类的成员变量,或者调用对象类的成员函数,Go语言中面向对象的实现方式3,func(p*Person)say(sentencestring)fmt.Print(p.Name,says,sentence,n)func(vPerson)getAge()intreturnv.Age,成员函数定义在指针和值上的区别,一般来说,需要改变对象数据的函数,应该定义在指针上,否则定义在值上,目录导航,3.10,3.8面向对象编程条件判断与分支循环,Contents,a:

=10b:

=15ifabfmt.Println(a-b)elsefmt.Println(b-a),基本的条件判断分支,a:

=10b:

=10ifa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 纺织轻工业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1