首页 > 编程笔记 > Go语言笔记 阅读:6

Go语言函数的返回值(非常详细)

函数的功能并不仅限于简单的输出。调用函数常用于获取一些数据,再将这些数据应用到其他程序中,函数返回值就是获取的数据。

设置函数的返回值使用 return 关键字,定义函数的返回值可以是一个,也可以是多个。

Go语言函数返回单个值

返回单个值是设置函数返回值最简单的形式。

在定义函数时需要指定返回单个值的数据类型,在函数体中使用 return 关键字定义函数的返回值,返回值需要与定义函数时的返回类型一致。

1) 返回基本数据类型

函数可以返回基本数据类型的值,包括数值、字符串等。例如,定义计算两个数的乘积的函数 product(),并将计算结果作为函数的返回值,代码如下:
package main

import "fmt"

func product(m int, n int) int { //定义product()函数
    return m * n                 //返回两个参数的乘积
}

func main() {
    fmt.Print(product(5, 6)) //调用product()函数
}
运行结果如下:

30


函数的返回值可以直接赋给变量或用于表达式中,也就是说可以在表达式中调用函数。例如,将上面示例中函数的返回值赋给变量 result,再输出,代码如下:
package main

import "fmt"

func product(m int, n int) int { //定义product()函数
    return m * n                 //返回两个参数的乘积
}

func main() {
    result := product(5, 6) //调用product()函数
    fmt.Print(result)
}

【实例】某顾客去商场购物,购买的商品信息如下:
定义一个带有两个参数的函数 price(),将商品单价和商品数量作为参数进行传递。通过调用函数并传递不同的参数分别计算两种商品的总价,最后计算所有商品的总价并输出。代码如下:
package main

import "fmt"

func price(unitPrice, number int) int { //定义函数,将商品单价和商品数量作为参数传递
    totalPrice := unitPrice * number //计算单个商品总价
    return totalPrice                 //返回单个商品总价
}

func main() {
    phone := price(2699, 2) //调用函数,计算手机总价
    computer := price(3666, 3) //调用函数,计算笔记本电脑总价
    total := phone + computer //计算所有商品总价
    fmt.Print("所有商品总价:", total, "元") //输出所有商品总价
}
运行结果如下:

所有商品总价:16396元

2) 返回复合数据类型

函数除了返回基本数据类型的值,还可以返回复合数据类型的值,包括数组、切片和集合等数据结构

例如:
package main

import "fmt"

func GetInfo(key string, value int) map[string]int { //定义GetInfo()函数
    info[key] = value
    return info
}

var info = make(map[string]int)

func main() {
    GetInfo("Tony", 25) //调用GetInfo()函数
    GetInfo("Jimmy", 23) //调用GetInfo()函数
    GetInfo("Terry", 26) //调用GetInfo()函数
    for k, v := range info { //遍历输出
        fmt.Print(k+": ", v, "岁")
    }
}
运行结果如下:

Tony: 25 岁
Jimmy: 23 岁
Terry: 26 岁

在上述代码中,GetInfo() 函数返回一个集合,通过调用该函数并传递参数向集合中添加数据,再使用 for-range 循环遍历并输出集合中的数据。

Go语言函数返回多个值

Go语言支持函数返回多个值,但返回的值要与定义函数时的返回类型一致。

例如:
package main

import "fmt"

func swap(str1, str2 string) (string, string) { //定义swap()函数
    return str2, str1 //交换位置
}

func main() {
    type1, type2 := swap("手机", "电脑") //调用swap()函数
    fmt.Println(type1, type2) //输出结果
}
运行结果如下:

电脑 手机


【实例】通过自定义函数获取切片中的最小值和最大值。代码如下:
package main

import "fmt"

func minmax(num []int) (int, int) { //定义minmax()函数
    minValue := num[0] //获取最小值
    for i := 1; i < len(num); i++ {
        if num[i] < minValue {
            minValue = num[i]
        }
    }
    maxValue := num[0] //获取最大值
    for i := 1; i < len(num); i++ {
        if num[i] > maxValue {
            maxValue = num[i]
        }
    }
    return minValue, maxValue //返回最小值和最大值
}

func main() {
    minValue, maxValue := minmax([]int{6, 9, 7, 3, 5, 2}) //调用minmax()函数
    fmt.Printf("最小值是%d,最大值是%d", minValue, maxValue) //输出结果
}
运行结果如下:

最小值是2,最大值是9

在定义函数时,还可以给返回值定义变量名,返回值变量的默认值为返回类型的默认值,即数值为 0,字符串为空字符串,布尔值为 false 等。

例如,定义一个函数并设置返回值,为两个整型返回值设置变量名,分别为 m 和 n。代码如下:
package main

import "fmt"

func cal(m1, num2 int) (m, n int) { //定义cal()函数
    m = num1 * 10
    n = num2 * 10
    return
}

func main() {
    r1, r2 := cal(6, 9) //调用cal()函数
    fmt.Println(r1, r2) //输出结果
}
运行结果如下:

60 90

在上述代码中,在定义函数时将返回值命名为 m 和 n,在函数体中可以直接对 m 和 n 进行赋值,并使用 return 关键字进行返回,这样就可以直接返回定义的两个返回值 m 和 n。

相关文章