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
使函数更清晰; - • 使用
_
忽略无用值,避免不必要变量。