《61396-Go语言程序设计项目化教程(微课版)3.2 函数的使用.pptx》由会员分享,可在线阅读,更多相关《61396-Go语言程序设计项目化教程(微课版)3.2 函数的使用.pptx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、函数的使用函数的使用访问权限闭包匿名函数多返回值函数01.03.02.04.目录包管理05.01访问权限Go语言访问权限Go语言没有像其它语言一样有public、protected、private等访问控制修饰符Go语言通过字母大小写来控制可见性的如果定义的常量、变量、类型、接口、结构、函数等的名称是:大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内使用(相当于private,变量或常量也可以下划线开头)1访问权限访问权限各包之间访问权限以小写开头,则只在当前包中可见,可在当前包中直接使用以大写开头,则是公共实体,在其它包中可见,可导入使用1访问权限访问权限p
2、ackagemycomimportfmtfuncIsBlank(strstring)boolreturnisEmpty(str)funcisEmpty(strstring)booliflen(str)0returntruereturnfalse“Public”函数-要大写字母开头。若以小写字母开头,同包可以访问,其他包不能访问。02匿名函数匿名函数概念匿名函数定义格式2匿名函数匿名函数Go语言支持匿名函数,在Go中也被称作函数字面量Go语言支持随时在代码里定义匿名函数;可以在需要使用函数时再定义函数;函数可以作为一种类型被赋值给函数类型的变量,匿名函数也往往以变量方式传递;Go语言中的匿名函数
3、是指不需要定义函数名的一种函数实现方式,由一个不带函数名的函数声明和函数体组成。匿名函数的特点func(参数列表)(返回参数列表)函数体(实参)匿名函数的定义2匿名函数匿名函数packagemainimport(fmt)funcmain()/定义并调用Go语言的匿名函数func()fmt.Println(HelloHaiCoder)()我们定义了一个匿名函数,并且在该匿名函数的最后使用()的形式来调用该匿名函数,结果输出了匿名函数的函数体内容。如果该匿名函数最后不加(),那么该匿名函数就不会被执行。运算结果为:HelloHaiCoder2匿名函数匿名函数packagemainimport(fm
4、t)funcmain()/定义并调用带参数的匿名函数func(num1,num2int)fmt.Println(num1,+,num2,=,num1+num2)(10,20)我们定义了一个带两个int类型参数的匿名函数,并且在该匿名函数的最后使用()的形式来调用该匿名函数,在()里面我们传入了10和20,即10和20是这个匿名函数的参数,结果输出了这两个参数的和。运算结果为:10+20=302匿名函数匿名函数匿名函数使用总结定义并同时调用匿名函数,在定义匿名函数时,可以通过在匿名函数后添加“()”的方式直接传入实参。将匿名函数赋值给函数变量,就可以通过调用函数变量来使用匿名函数。2匿名函数匿名
5、函数funcwalk(lisint,callbackfunc(int)匿名函数作为参数packagemainimportfmtfuncwalk(lisint,callbackfunc(int)for_,i:=rangeliscallback(i)funcmain()slice:=int1,2,3,4walk(slice,func(iint)fmt.Println(Num=,i)运算结果为:Num=1Num=2Num=3Num=4匿名函数作为参数案例我们定义了一个带两个参数的函数walk,第一个参数是一个int切片,第二个参数是一个带int类型参数的匿名函数callback;该函数的功能是使用f
6、or循环遍历切片里的每一个数,并调用callback。packagemainimportfmtfuncprint(numint)fmt.Println(Num=,num)funcwalk(lisint,callbackfunc(int)for_,i:=rangeliscallback(i)funcmain()slice:=int1,2,3,4walk(slice,print)运算结果为:Num=1Num=2Num=3Num=4Go语言中也可以先定义出函数,再将函数作为参数2匿名函数匿名函数03闭包闭包形成环境函数本身不存储任何信息,只有与引用环境结合后形成的闭包才具有“记忆性”函数是编译期静态
7、的概念,而闭包是运行期动态的概念闭包(Closure)在某些编程语言中也被称为Lambda表达式闭包的作用函数+引用环境=闭包闭包是一种特殊匿名函数闭包是指引用了自由变量的函数,被引用的自由变量和函数一同存在即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量闭包的特性3闭包闭包3闭包闭包packagemainimportfmtfuncmain()f:=demo()fmt.Println(f()fmt.Println(f()fmt.Println(f()fmt.Println(f()funcdemo()func()intvarxintreturnfunc()int
8、x+returnx*xfmt.Println(f()表示为在打印时调用f()函数,在demo()函数中给与赋值,多层嵌套形成闭包环境。运行结果为:1491604多返回值函数同一种类型返回值带有变量名的返回值在Go语言中定义函数格式时,会存在返回值参数及类型Go语言中函数可以不返回任何值Go语言中函数可以返回一个或者多个值,即在定义返回参数时可以定义多个,类型也可以是多个,多返回值能方便地获得函数执行后的多个返回参数4多返回值函数多返回值函数多返回值定义同一种类型返回值带有变量名的返回值用括号将多个返回值类型括起来用逗号分隔每个返回值的类型使用return语句返回时,值列表的顺序需要与函数声明的
9、返回值类型一致同一种类型返回值funcfuncName(param1,param2paramType1,.)(returnValue1,returnValue2,.Type)/执行语句.return返回值列表同一种类型返回值定义4多返回值函数多返回值函数Go语言中还支持对于返回值进行命名,即返回值就和参数拥有相同的参数变量名称和类型对于拥有命名的返回值变量的默认值为该类型的默认值,即数值为0,字符串为空字符串,布尔为false,指针为nil等。带有变量名的返回值func函数名(参数列表)(返回值名称1类型1,返回值名称2类型2)return带有变量名的返回值定义4多返回值函数多返回值函数pac
10、kagemainimport(fmtmath)funcgetPageCount(pageSizeint)(isOkbool,pageCountint)ifpageSize=0returnpageCount=int(math.Ceil(float64(100/pageSize)isOk=truereturnfuncmain()ifisOk,pageCount:=getPageCount(10);!isOkfmt.Println(Error)elsefmt.Println(Ok,PageCount=,pageCount)运行结果为:Ok,PageCount=10我 们 定 义 了 一 个 函 数
11、getPageCount,传 入 一 个 int类型的参数pageSize,函数返回一个bool类型的变量表示函数是否执行成功,和一个int类型的变量表示最终有多少页数据。4多返回值函数多返回值函数packagemainimportfmtfunccalcute(aint,bint)(int,int)ifa=0&b=0return0,0elsereturna*b,a+bfuncmain()fmt.Println(calcute(11,12)返回值类型有两个,return后面跟了两个返回值。运行结果为:132234多返回值函数多返回值函数05包管理GOPATHGOROOT包包引用5包管理包管理GO
12、PATHGo中不存在文件概念,只有目录结构包Go语言中通过包的概念交互代码GOROOTGo的目录结构包引用Go语言中通过包引用控制访问关系在Go语言中是不存在文件的概念的,通过目录结构来体现项目工程的结构关系Go代码可以放在GOPATH工作区中Go中所有操作基本都是围绕GOPATH来进行的,即GOPATH必须要设置,但并不是固定不变的GOPATH的目的是为了告知Go需要代码的时候去哪里查找,这里的代码包括本项目和外部项目的代码。其中工作区类似于目录,这个目录包含三个子目录:src目录、pkg目录和bin目录GOPATH5包管理包管理5包管理包管理目录src用于包含所有的源代码,是Go命令行工具
13、一个强制的规则pkg和bin则无须手动创建,必要时Go命令行工具在构建过程中会自动创建GOPATHsrc目录用于以代码包的形式组织并保存Go源码文件(如:go.c.h.s等)是Go编译时查找代码的地方pkg目录用于存放经由goget/install命令构建安装后的代码包的“.a”归档文件(分类),是编译生成的lib文件存储的地方bin目录与pkg目录类似,在通过goget/install命令完成安装后,保存由Go命令源码文件生成的可执行文件是Go语言的程序安装目录目的是告知Go当前的安装位置GOROOT5包管理包管理Go语言的包借助了目录树的组织形式一般包的名称就是其源文件所在目录的名称虽然Go语言没有强制要求包名必须和其所在的目录名同名,但还是建议包名和所在目录同名,这样结构更清晰同一个目录下的同级的所有go文件应该属于一个包包5包管理包管理包名一般是小写的,使用一个简短且有意义的名称包名一般要和所在的目录同名,也可以不同,包名中不能包含-等特殊符号包一般使用域名作为目录名称,这样能保证包名的唯一性,比如GitHub项目的包一般会放到GOPATH/src/