12、Go 语言函数

函数是代码块的包装,把一些完成指定任务的代码放到一起,起个名字,就成为了函数

因此我们可以使用函数来划分不同功能,逻辑上每个函数执行的是指定的任务

Go语言使用 func 关键字定义函数

函数定义

Go语言函数定义语法格式如下:

func function_name( [parameter list] ) [return_types] {
   //函数体

  • func : 函数由 func 开始声明
  • **function_name :**函数名称,函数名和参数列表一起构成了函数签名
  • parameter list: 参数列表

参数就像一个占位符,当函数被调用时,我们可以将值传递给参数,这个值被称为实际参数

参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数

  • return_types: 返回类型

函数返回一列值,return_types 是该列值的数据类型

有些功能不需要返回值,这种情况下 return_types 不是必须的

  • 函数体: 函数定义的代码集合

其它说明

Go语言至少有个 main() 函数

函数声明告诉了编译器函数的名称,返回类型,和参数

Go语言标准库提供了多种可动用的内置的函数

例如,len() 函数可以接受不同类型参数并返回该类型的长度,例如我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的函数个数

范例

下面的代码定义了一个 max 函数

max函数传入两个整型参数 num1 和 num2,并返回这两个参数的最大值

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 声明局部变量 */
   var result int
   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 

函数调用

创建函数,就是定义了函数需要做什么

现在我们需要使用这个函数,要调用它来执行指定任务

Go语言使用 函数名 + ( 参数列表 ) 调用函数

下面的代码调用了我们上面定义的 max 函数,向函数传递参数,并返回值

/**
 * file: main.go
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright * 2015-2065 ddkk.com. All rights reserved.
 */
package main
import "fmt"
func main() {
   /* 定义局部变量 */
   var a int = 13
   var b int = 7
   var ret int
   /* 调用函数并返回最大值 */
   ret = max(a, b)
   fmt.Printf( "最大值是 : %d\n", ret )
/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 定义局部变量 */
   var result int
   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 

上面的范例是在 main() 函数中调用 max() 函数,编译运行以上 Go 语言范例,输出结果如下

$ go run main.go
最大值是 : 13

函数返回多个值

Go语言允许函数返回多个值

/**
 * file: main.go
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright * 2015-2065 ddkk.com. All rights reserved.
 */
package main
import "fmt"
func swap(x, y string) (string, string) {
   return y, x
func main() {
   a, b := swap("Mahesh", "Kumar")
   fmt.Println(a, b)

编译运行以上范例,输出结果如下

$ go run main.go
Kumar Mahesh

函数参数

声明函数时的参数列表称之为 形参

形参就像定义在函数体内的局部变量

调用函数时传递的参数列表叫做 实参

Go语言可以通过两种方式传递实参

传递类型 描述
值传递 是指在调用函数时将实际参数复制一份传递到函数中
这样在函数中如果对参数进行修改,将不会影响到实际参数
引用传递 是指在调用函数时将实际参数的地址传递到函数中
那么在函数中对参数所进行的修改,将影响到实际参数

默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数

函数用法

函数用法 描述
函数作为值 函数定义后可作为值来使用
闭包函数 闭包是匿名函数,可在动态编程中使用
方法 方法就是一个包含了接受者的函数