Golang 语言支持命名返回值,它与使用普通(匿名)返回值不同的是,命名返回值会被视 为定义在函数顶部的变量,可以在函数中直接对返回值进行赋值,并且在使用 return 语句 返回时,不再必须在其后面指定参数名,也就是支持“裸”返回。

而使用普通返回值时,使用 return 语句返回时,需要在其后面指定与普通返回值相同类型的参数名。

好处:提供代码可读性,特别是函数有多个返回值的时候

坏处:命名返回值会被函数中同名的变量覆盖

例子,返回参数中的最大值和最小值:

package main
 
import (
    "fmt"
    "math"
)
 
// maxMin 函数接收可变参数,并返回最大值和最小值
func maxMin(nums ...int) (max int, min int, err error) {
    // 如果参数个数为0,则返回错误
    err = fmt.Errorf("err: 参数个数为0")
    if len(nums) == 0 {
        return 0, 0, err
    }
    // 初始化最小值为最大整数
    min = math.MaxInt
    // 遍历所有参数,求最大值和最小值
    for _, num := range nums {
        if num > max {
            max = num
        }
        if num < min {
            min = num
        }
    }
    return max, min, nil
}
 
func main() {
    var maxNum, minNum int
    // 可以选择处理错误, 也可以选择不处理,直接丢弃掉
    maxNum, minNum, _ = maxMin(4, 2, 3)
    fmt.Println(maxNum, minNum)
    // 也可以选择处理此错误
    maxNum, minNum, err := maxMin()
    if err != nil {
        fmt.Println(err)
    }
}