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