Go语言原生支持多返回值,常用于“结果+error”模式以实现显式错误处理;可命名返回参数提升可读性与defer支持;多返回值不宜超过4–5个,否则应封装为结构体。
Go语言原生支持多返回值,这是它区别于许多其他语言的重要特性之一。函数可以同时返回多个值,常用于“结果 + 错误”这种经典组合,让错误处理更显式、更安全。
定义函数时,在函数名后的括号中列出所有返回类型,用括号包裹,类型之间用逗号分隔。如果多个连续返回值类型相同,可合并简写。
例如,一个计算两个整数商和余数的函数:
func divide(a, b int) (int, int) {调用时可一次性接收多个返回值:
quotient, remainder := divide(10, 3) // quotient=3, remainder=1
Go 推崇“显式错误处理”,绝大多数 I/O 或可能失败的操作都采用 (result, error) 形式返回。error 是接口类型,通常用 errors.New 或 fmt.Errorf 构造。
可在函数签名中为返回值命名,这样既增强代码可读性,又允许在函数体内直接赋值(无需重复写 return 值),还便于在 defer 中访问返回值。
func parseConfig(s string) (cfg map[string]string, err error) {注意:命名返回值会自动初始化为对应类型的零值(如 map 为 nil,string 为 "",error 为 nil),适合需要统一错误清理或日志记录的场景。
当业务逻辑需返回多个非错误结果(如用户、权限、计数)加一个 error 时,保持顺序清晰即可:
func getUserWithStats(id int) (user User, permissions []string, loginCount int, err error) {调用时建议用变量接收并明确用途,避免位置混淆:
u, perms, count, err := getUserWithStats(123)不复杂但容易忽略的是:始终优先检查 error;命名返回值慎用于导出函数(影响 API 清晰度);多个返回值不宜超过 4–5 个,否则建议封装为结构体。