多个返回值
返回元组与错误处理模式
多个返回值 是 CoddyKit 上的免费 Go Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
为什么需要多返回值?
Go 函数可以返回多个值,因此不需要输出参数或异常。最常见的模式是同时返回结果和错误:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}处理多返回值
调用方会以元组形式接收所有返回值。对于不需要的值,请使用 _ 将其丢弃:
result, err := divide(10, 3)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
value, _ := divide(8, 2) // discard error命名返回值
可以为返回值命名,使其成为函数内部的变量:
func minMax(nums []int) (min, max int) {
min, max = nums[0], nums[0]
for _, n := range nums[1:] {
if n < min { min = n }
if n > max { max = n }
}
return // naked return
}裸返回值
不带参数的 return 会返回命名的返回变量。请谨慎使用——仅适用于名称本身就能清楚表达含义的短函数:
- 短函数:可以接受
- 长函数:会降低可读性——请优先使用显式返回
(值,错误)模式
Go 中惯用的错误处理模式:
func readConfig(path string) (Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return Config{}, fmt.Errorf("read config: %w", err)
}
var cfg Config
return cfg, json.Unmarshal(data, &cfg)
}切勿忽略错误
使用 _ 忽略错误很危险。最佳实践包括:
- 检查每个错误,除非有明确理由不这样做
- 使用
fmt.Errorf("op: %w", err)为错误添加上下文 - 仅在程序边界处使用
log.Fatal或 panic,不要在库的深层代码中使用
三值返回
有些函数会返回三个值,不过这种情况并不常见:
func parseIPPort(s string) (ip string, port int, err error) {
// ... parsing logic
return
}返回结构体还是多个值
以下是选择返回结构体还是多个值的时机:
- 2~3 个紧密相关的值:可以使用多个返回值
- 4 个或更多值,或包含可选字段:请使用结构体
- (值,错误)模式:始终使用多个返回值
为已有变量赋值
为调用前已声明的变量赋值时,请使用 =,而不是 :=:
var cfg Config
var err error
cfg, err = loadConfig()
if err != nil { ... }方法链中的多个返回值
Go 不支持直接对多个返回值进行方法链调用(不同于 Rust 的 Result.map)。请使用中间变量,在每一步处理错误:
data, err := fetchData(url)
if err != nil { return err }
parsed, err := parseData(data)
if err != nil { return err }
return save(parsed)快速检查
在 Go 中,裸返回会执行什么操作?
回顾:多个返回值
多个返回值是 Go 的核心惯用写法:
- 函数可以在括号括起的列表中返回多个值
- (值,错误)模式随处可见——请始终检查错误
- 命名返回变量支持裸返回(请谨慎使用)
- 使用
_丢弃不需要的值 - 相比输出参数,优先使用多个返回值,以便构建更清晰的接口
下一节:可变参数函数。
常见问题解答
「多个返回值」课时是免费的吗?
是的 — 「多个返回值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「多个返回值」这节课中我会学到什么?
返回元组与错误处理模式 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「多个返回值」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。