1.前言
函数是一段代码的片段,包含连续的执行语句,它可以将零个或多个输入参数映射到零个或多个参数输出。函数像一个黑盒,对它的使用者隐藏实现细节。还可以在代码中通过函数调用来执行它们。
main
func main() { }
2.函数声明
func
func name(parameter-list) (result-list) { function body }
funcfuncdeffuncreturn
2.1 函数例子
接下来,看一个简单的 Go 整数计算器的 加、减、乘、除 函数的例子。
package main import "fmt" func add(num1 int, num2 int) (num3 int) { num3 = num1 + num2 return } func subtract(num1 int, num2 int) int { num3 := num1 - num2 return num3 } func multiply(num1 int, num2 int) int { result := num1 * num2 return result } func divide(num1 int, num2 int) (result int) { if num2 != 0 { result = num1 / num2 } else { panic("division by zero") } return result } func main() { fmt.Printf("2021 + 19 = %d\n", add(2021, 19)) fmt.Printf("2021 - 19 = %d\n", subtract(2021, 19)) fmt.Printf("2021 * 19 = %d\n", multiply(2021, 19)) fmt.Printf("2021 / 19 = %d\n", divide(2021, 19)) // fmt.Printf("2021 / 0 = %d\n", divide(2021, 0)) }
结果为:
2021 + 19 = 2040
2021 - 19 = 2002
2021 * 19 = 38399
2021 / 19 = 106
panic
panic: division by zero goroutine 1 [running]: main.divide(...) ...
2.2 Go 函数支持多返回值
Go 支持一个函数返回多个值:
func f() (int, int){ return 2014, 2021 } func main() { x, y := f() }
这里需要做三个改变:
,return, :==
(x, err := f())(x, ok := f())
2.3 变量函数
对于 Go 函数中的最后一个参数,有一种特殊的形式可以使用:
func add(args ...int) int { total := 0 for _, v := range args { total += v } return total } func main() { fmt.Println(add(1,2,3)) }
...
fmt.Println
func Println(a ...interface{}) (n int, err error)
Println()...ints
func main() { s1 := []int{1,2,3} fmt.Println(add(s1...)) }
2.4 闭包
可以在函数内部创建函数。
func main() { add := func(x, y int) int { return x + y } fmt.Println(add(1,1)) }
add func(int, int) int
2.5 递归
最后,一个函数能够调用自己。下面是一种方法来计算一个数字的阶乘。
package main import "fmt" func factorial(x uint) uint { if x == 0 { return 1 } return x * factorial(x-1) } func main() { fmt.Println(factorial(4)) }
闭包和递归是强大的编程技术,它构成了被称为函数式编程的范式的基础。大多数人都会发现函数式编程比以下方法更难理解:for 循环、if 语句、变量和简单函数的方法。
3.总结
return