七叶笔记 » golang编程 » Go语言入门必知教程-函数

Go语言入门必知教程-函数

函数是为了执行特定任务而存在于程序内的一组语句,函数接受输入并返回输出。

函数允许将常用的代码块提取出来成为单个组件。

使用最广的Go函数是main(),每个独立的Go程序都必须有个main函数。

创建函数

函数声明以func关键字开头,后跟函数名字、一对括号(),然后是函数代码块。

下面的示例有一个名为SimpleFunction的函数。它不接受任何参数,也不返回任何值。

结果:

Hello World

有参数的函数

数据可以通过参数传递给函数,一个参数就像一个变量。

参数在函数名后面的括号内指定,可以添加任意多个参数,需用逗号分隔它们。

下面的示例是一个带有两个int类型参数的函数。调用add()函数时,传递两个整数值(例如20,30):

结果:

50

如果函数名以大写字母开头,该函数将导出到其他包中。如果函数名以小写字母开头,则不会将其导出到其他包,但可以在同一包中调用此函数。

有返回值的函数

在本例中,add()函数接受两个整数参数,并返回一个名为total的整数值。

注意,当返回值声明为函数签名的一部分时,返回语句是必需的:

参数值和返回值的类型必须与函数签名匹配,如果修改上面的程序并在参数中传递一些字符串值,那么程序将会抛出一个异常。

命名返回值

Golang允许命名函数的返回值,可以通过定义变量来命名返回值,这里在函数声明中为函数的返回值定义了一个整数类型的变量area:

结果:

C:\Golang>go run main.go

Parameter: 100

Area: 600

由于函数声明了返回值,因此执行流程的最后一条逻辑语句必须是返回语句。

返回多个值

Golang中的函数可以返回多个值,这在许多场合下很有用。

下面的例子声明有两个返回值的函数:

注意:

  • 函数名必须以字母开头,并且可以有任意数量的字母和数字。
  • 函数名不能以数字开头。
  • 函数名不能包含空格。
  • 以大写字母开头的函数将导出到其他包中,以小写字母开头的函数则不会将导出到其他包中,但可以在同一包中调用。
  • 如果一个函数名由多个单词组成,那么第一个单词后面的每个单词都应该大写如下:empName、EmpAddress等。
  • 函数名区分大小写(car、Car和CAR是三个不同的变量)。

将地址传递给函数

把变量的地址传递给函数,在函数体内部的使用解引用修改该变量的值:

结果:

C:\Golang>go run main.go

Before: John 20

After : John Doe 25

匿名函数

匿名函数是没有名字函数,没有任何指定的标识符来引用它。匿名函数可以接受输入并返回输出,就像标准函数一样。

匿名函数定义后赋给变量或立即调用。

定义匿名函数,并将其赋给变量:

定义接收参数的匿名函数:

定义接收参数和有返回值的匿名函数:

匿名函数常用于实现不需要命名且临时使用的功能。

闭包 函数

闭包是匿名函数的特殊用法,它是访问在函数体外部定义的变量的匿名函数。

访问函数体外定义的变量的匿名函数:

每次循环迭代中在函数体内访问外部的变量的匿名函数:

高阶函数

高阶函数是以函数作为输入参数或以函数作为输出返回值的函数。

高阶函数是对其他函数进行操作,将它们作为参数,也可以返回它们。

将函数作为参数传递给其他函数:

结果:

C:\Golang>go run main.go

10

在上面的程序中,partialSum函数返回一个sum函数,该函数接受两个int参数并返回一个int参数。

返回从其他函数返回的函数:

结果:

C:\Golang>go run main.go

110

在上面的程序中,指定该函数的签名返回两个函数和一个整型值。

用户定义的函数类型

Golang还支持定义自己的函数类型,使用type关键字。

上述程序的修改版本,功能类型如下:

相关文章