橘子味的心
标题: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: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. 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: 简单教程(www.twle.cn)
 * Copyright © 2015-2065 www.twle.cn. 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 语言使用的是值传递,即在调用过程中不会影响到实际参数

函数用法

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

分类