区块链基础语言(十三)——Go语言函数(上)

函数这一章节主要分为五个部分讲解,分别为:内置函数、自定义函数、变量作用域、匿名函数与闭包、递归函数。本节讲解内置函数、自定义函数和变量作用域。

一、内置函数

1.1 常见的内置函数常见的内置函数如表1所示。

1.2 内置函数的调用过程

1.2.1 步骤

第一步:先导入该函数所在的包;
第二步:再调用,调用格式为:包名.函数名

1.2.2 示例

二、自定义函数

2.1 定义格式

注:
a. 函数是基本的代码块,用于执行一个任务。Go语言通过函数来划分任务,不同功能的函数执行的是指定的任务;
b. Go语言最少有一个main()函数;
c. 函数由关键字 func 开始声明,函数声明告诉了编译器函数的名称,返回参数和类型;
d. FuncName即函数名称,根据约定:函数名首字母小写即private,只能在本包里使用;大写即public,可以被外部包调用;
e. 返回类型:
① 上面返回值声明了两个变量名a和b(命名返回参数),变量名不是必须需要,可以只有类型没有变量名;
② 如果只有一个返回值且不声明返回值变量,可以省略变量名和返回值的括号,保留变量类型;
③ 如果没有返回值,那么就直接省略最后的返回信息。如果有返回值,那么必须在函数的内部添加return语句。

2.2 函数参数

2.2.1 参数分类

函数参数可以分为形式参数和实际参数两类,如表2所示。

函数的形参和实参具有以下特点:
a. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
b. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
c. 实参和形参在数量上、类型上、顺序上应严格一致,否则会发生类型不匹配的错误。
d. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

2.2.2 参数传递

参数传递分为值传递和引用传递,如表3所示。

值传递和引用传递的示例如下:

2.2.3 参数种类

实参可以是常量、变量、函数,也可以是数组、切片,但必须是确定的值。数组和切片在后面章节再做介绍,常量、变量在前面章节已经介绍过,这里主要介绍函数作为参数的情况:

2.3 自定义函数种类

2.3.1 无参无返值

无参无返回值就是既没有传入参数,也没有返回值。

2.3.2 有参无返回值

有参无返回值就是有传入的参数,没有返回值。a. 普通参数列表

b. 不定参数列表
形如“… type”格式的类型只能作为函数的参数类型存在,“… type”本质上是切片。

2.3.3 无参有返回值

没有传入参数、有返回值的函数,必须有明确的终止语句,否则会引发编译错误。return 语句可以跳出当前函数。
a. 一个返回值

b. 多个返回值

2.3.4 有参与返回值

有参有返回值就是有传入的参数,有返回值。

三、变量作用域

3.1 变量作用域的分类

变量作用域指的是变量在源代码中的作用范围。根据其作用范围,分为两种:局部变量和全局变量,如表4所示。

3.2 不同作用域的同名变量的访问原则

a. 在同一个作用域内,就近访问最近的变量;
b. 如果此作用域没有此变量声明,则访问全局变量;
c. 如果全局变量也没有,则报错。

3.3 示例

参考资料
[1] 

posted @ 2019-03-07 14:14  网鱼  阅读(232)  评论(0编辑  收藏  举报