09_函数参数返回值与可变参数
定义函数、处理多返回值和可变参数,知道何时返回错误。
Go 基础专题 09:函数、参数与返回值
学习目标:定义函数、处理多返回值和可变参数,知道何时返回错误。
核心知识
函数写作 func name(parameters) returnType。连续同类型参数可简写为 func add(a, b int) int。Go 常用多个返回值表达结果和错误,例如 value, err := strconv.Atoi(raw);应先检查 err 再使用 value。函数也是值,可以传给其他函数或保存到变量。
package main
import (
"fmt"
"strconv"
)
func double(raw string) (int, error) {
value, err := strconv.Atoi(raw)
if err != nil {
return 0, err
}
return value * 2, nil
}
func main() {
result, err := double("21")
fmt.Println(result, err)
}
可变参数写 func sum(values ...int) int,函数内部的 values 是切片。已有切片可用 sum(numbers...) 展开。Go 没有默认参数和函数重载;通常通过清晰命名、选项结构体或独立函数表达差异。命名返回值可用于文档或简短函数,但复杂函数中裸 return 可能让数据流不清楚。
参数传递总是复制值;若传的是切片,复制的是切片头部,它仍指向同一底层数组。想隔离修改需明确复制元素。
逐步理解
在 double("21") 中,解析成功得到 21 和 nil,然后函数返回 42 和 nil。若传入 "2x",解析失败,函数应立即返回零值与错误,不能继续计算。多返回值让错误成为接口的一部分;调用方决定是重试、转换提示、记录还是继续向上返回。
动手练习
练习:写 max(a, b int) int。答案要点:if a > b { return a }; return b。