Go 函数进阶
多返回值、命名返回值、可变参数、函数类型、闭包 · 难度:进阶 · +20XP
Go 函数进阶特性
多返回值
func divide(a, b float64) (float64, error) {
if b == 0 { return 0, errors.New("div by zero") }
return a / b, nil
}
result, err := divide(10, 2)
命名返回值
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return // 裸返回(naked return),只在短函数中用
}
可变参数
func sum(nums ...int) int {
total := 0
for _, n := range nums { total += n }
return total
}
sum(1, 2, 3, 4, 5) // 15
// 展开切片传入
nums := []int{1, 2, 3}
sum(nums...)
函数类型与闭包
type Operation func(int, int) int
var add Operation = func(a, b int) int { return a + b }
// 闭包:捕获外部变量
func adder() func(int) int {
sum := 0
return func(x int) int { sum += x; return sum }
}