🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 函数定义 函数使用`func`关键字,具体格式如下: ~~~ func 函数名(参数)(返回值){ 函数体 } ~~~ * 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名。 * 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用`,`分隔。 * 返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用`()`包裹,并用`,`分隔。 * 函数体:实现指定功能的代码块。 eg: ~~~ func intSum(x int, y int) int { return x + y } ~~~ 函数的参数和返回值都是可选的,不是必须的。 ## 函数的调用 定义了函数之后,我们可以通过`函数名()`的方式调用函数。 ~~~ func main() { sayHello() } ~~~ 注意,调用有返回值的函数时,可以不接收其返回值。 ## 参数 ### 类型简写 函数的参数中如果相邻变量的类型相同,则可以省略类型 eg: ~~~ func intSum(x, y int) int { return x + y } ~~~ ### 可变参数 可变参数是指函数的`参数数量`不固定。Go语言中的可变参数通过在参数名后加`...`来标识。 注意:可变参数通常要作为函数的最后一个参数。 eg: ~~~ func intSum2(x ...int) int { fmt.Println(x) //x是一个切片 sum := 0 for _, v := range x { sum = sum + v } return sum } func main(){ ret1 := intSum2() ret2 := intSum2(10) ret3 := intSum2(10, 20) ret4 := intSum2(10, 20, 30) fmt.Println(ret1, ret2, ret3, ret4) //0 10 30 60 } ~~~ 本质上,函数的可变参数是通过切片来实现的。 ## 返回值 ### 多返回值 Go语言中函数支持多返回值,函数如果有多个返回值时必须用`()`将所有返回值包裹起来。 eg: ~~~ func calc(x, y int) (int, int) { sum := x + y sub := x - y return sum, sub } ~~~ ### 返回值命名 函数定义时可以给返回值命名,并在函数体中直接使用这些变量,最后通过`return`关键字返回。 eg: ~~~ func calc(x, y int) (sum, sub int) { sum = x + y sub = x - y return } ~~~ ### 返回值补充 当我们的一个函数返回值类型为slice时,nil可以看做是一个有效的slice,没必要显示返回一个长度为0的切片。 ~~~go func someFunc(x string) []int { if x == "" { return nil // 没必要返回[]int{} } ... } ~~~