Go语言中的函数有系统函数和自定义函数。

1、系统函数

系统函数就是Go语言自带的函数,系统函数一般根据功能封装在不同的包内,比如Print、Printf、Println都在fmt包内,Abs、Sin都在math包内,Listen、Dial都在net包内等等。如果要使用系统函数,就要引入相关的包。看下面代码:

package main

import "fmt"
import "math"

func main() {
    a := math.Abs(-1)
    fmt.Println(a)
}

其实程序的最初入口main函数其实也是定义在一个包内,就叫main包。

注意:如果没有使用包内的资源而导入这个包,这在Go语言是不允许的,系统会报出错误信息。

2、自定义函数

Go语言中的函数和C最大的不同点在于可以返回多个值。

函数格式:

自定义函数使用关键词func,定义的格式如下:

func 函数名(参数1 参数1类型, 参数2 参数2类型,...) (返回值类型1,返回值类型2,...) {
    函数体
    return var1, var2 ....
}
  • 函数名:就是函数的名称, 由字母、数字、下划线组成,其中首个字母不能为数字。在同一个包内,函数名称不能重名。
  • 参数:声明参数要指明类型,如果所有参数一致,则只要在最后加上1个类型声明就可以了。
  • 返回值:其中var1,var2,…的数据类型要分别和返回类型1,返回类型2,…相同。如果只有一个返回值,在声明返回值类型时可以不用小括号。

求两个数的和的函数示例:

func Sum(a, b int) int { //这边a, b是都是int型,所有在最后加上一个int就可以了
    return a + b
}

指明返回值名称的函数示例:

Go语言中的函数还有一个有意思的特性,如果在返回值类型声明中,直接指明返回值名称,那么在return语句中就不需要显示返回参数。如下例:

func Power(a int) (result int) { 
    result = a * a
    return 
}

上例中指明了返回值的名称,所以在函数中可以不用声明result就直接使用,在函数返回时直接return就可以了。注意:如果指明返回值名称,即使只有一个返回值,也要用小括号括起来。

多个返回值的函数示例:

这个函数是用来求一个整形数组中的最小值和最大值的。

func ExtremumInArray(array []int) (int, int) {
    if len(array) < 1 {
        return 0, 0
    }
    min := array[0]
    max := array[0]
    for _, v := range array {
        if v < min {
            min = v
        } else if v > max {
            max = v
        }
    }
    return min, max
}

调用时,用逗号分隔返回的变量就可以了。

min, max := ExtremumInArray(array)