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)
}
}