← Backend / Go / 基础专题

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。