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)