多返回值(Multiple Return Values)- 《Go语言实战指南》

发布于:2025-05-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

Go 语言支持函数返回多个值,这一特性在实际开发中非常常见,尤其用于错误处理。


一、函数返回多个值的基本语法

func 函数名(参数列表) (返回值1类型, 返回值2类型, ...) {
    // 函数体
    return 值1, 值2, ...
}
示例:计算商和余数
func divide(a, b int) (int, int) {
    return a / b, a % b
}

q, r := divide(10, 3)
fmt.Println("商:", q, "余数:", r)

输出:

商: 3 余数: 1

二、用于错误处理

Go 没有异常机制,采用 返回值 + error 的方式处理错误,这是多返回值的典型用法。

func safeDivide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("除数不能为0")
    }
    return a / b, nil
}
使用方式:
result, err := safeDivide(10, 0)
if err != nil {
    fmt.Println("出错:", err)
} else {
    fmt.Println("结果:", result)
}

三、返回值命名

Go 支持为返回值命名,适合函数逻辑较复杂时提高可读性:

func swap(a, b int) (x, y int) {
    x = b
    y = a
    return // 省略了 return 后的变量
}

四、忽略不需要的返回值(用 _

当你只关心部分返回值时,可以用 _ 忽略其他值:

_, remainder := divide(10, 3)
fmt.Println("只看余数:", remainder)

五、结合多值返回的实际应用场景

1. 文件操作
data, err := os.ReadFile("data.txt")
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(data))
2. 网络响应
resp, err := http.Get("https://example.com")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

六、使用建议

场景 建议做法
错误处理 返回 (值, error)
成对值 使用 (value1, value2) 明确区分
无用值 使用 _ 忽略
结构清晰 使用命名返回值提升可读性

七、小结

  • • Go 的多返回值提升了代码的表达能力;
  • • 搭配 error 实现显式错误控制;
  • • 命名返回值+裸 return 使函数更清晰;
  • • 使用 _ 忽略无用值,避免不必要变量。


网站公告

今日签到

点亮在社区的每一天
去签到