区块链基础语言(十三)——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] https://blog.csdn.net/douyuhua0918/article/details/7452373
https://www.cnblogs.com/chase-wind/p/5635325.html