区块链技术语言:Go语言函数(上) | 十三

链块学院
企业专栏
热度: 33070

函数分为上下两节介绍。本节是函数上部分,主要介绍了内置函数、自定义函数和变量作用域。

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

一、内置函数

1.1 常见的内置函数

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

Go语言

1.2 内置函数的调用过程

1.2.1 步骤

第一步:先导入该函数所在的包;

第二步:再调用,调用格式为:包名.函数名

1.2.2 示例

Go语言

二、自定义函数

2.1 定义格式

Go语言

注:a. 函数是基本的代码块,用于执行一个任务。Go语言通过函数来划分任务,不同功能的函数执行的是指定的任务;

      b. Go语言最少有一个main()函数;

      c. 函数由关键字 func 开始声明,函数声明告诉了编译器函数的名称,返回参数和类型;

      d. FuncName即函数名称,根据约定:函数名首字母小写即private,只能在本包里使用;大写即public,可以被外部包调用;

      e. 返回类型:

         ① 上面返回值声明了两个变量名a和b(命名返回参数),变量名不是必须需要,可以只有类型没有变量名;

         ② 如果只有一个返回值且不声明返回值变量,可以省略变量名和返回值的括号,保留变量类型;

         ③ 如果没有返回值,那么就直接省略最后的返回信息。如果有返回值,那么必须在函数的内部添加return语句。

2.2 函数参数

2.2.1 参数分类

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

Go语言

函数的形参和实参具有以下特点:

a. 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

b. 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

c. 实参和形参在数量上、类型上、顺序上应严格一致,否则会发生类型不匹配的错误。

d. 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

Go语言

2.2.2 参数传递

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

Go语言

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

Go语言

2.2.3 参数种类

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

Go语言

2.3 自定义函数种类

2.3.1 无参无返值

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

2.3.2 有参无返回值

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

Go语言

a. 普通参数列表

Go语言

b. 不定参数列表

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

Go语言

2.3.3 无参有返回值

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

a. 一个返回值

Go语言

b. 多个返回值

Go语言

2.3.4 有参与返回值

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

Go语言

三、变量作用域

3.1 变量作用域的分类

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

Go语言

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

a. 在同一个作用域内,就近访问最近的变量;

b. 如果此作用域没有此变量声明,则访问全局变量;

c. 如果全局变量也没有,则报错。

3.3 示例

Go语言


参考资料

[1] https://blog.csdn.net/douyuhua0918/article/details/7452373

[2] https://www.cnblogs.com/chase-wind/p/5635325.html


文章声明:本文为MarsBit专栏作者作品,版权归作者所有,不代表MarsBit观点。

声明:本文为入驻“火星财经 专栏”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
本内容旨在传递行业动态,不构成投资建议或承诺。