Go语言函数的返回值(非常详细)
函数的功能并不仅限于简单的输出。调用函数常用于获取一些数据,再将这些数据应用到其他程序中,函数返回值就是获取的数据。
设置函数的返回值使用 return 关键字,定义函数的返回值可以是一个,也可以是多个。
在定义函数时需要指定返回单个值的数据类型,在函数体中使用 return 关键字定义函数的返回值,返回值需要与定义函数时的返回类型一致。
函数的返回值可以直接赋给变量或用于表达式中,也就是说可以在表达式中调用函数。例如,将上面示例中函数的返回值赋给变量 result,再输出,代码如下:
【实例】某顾客去商场购物,购买的商品信息如下:
定义一个带有两个参数的函数 price(),将商品单价和商品数量作为参数进行传递。通过调用函数并传递不同的参数分别计算两种商品的总价,最后计算所有商品的总价并输出。代码如下:
例如:
例如:
【实例】通过自定义函数获取切片中的最小值和最大值。代码如下:
例如,定义一个函数并设置返回值,为两个整型返回值设置变量名,分别为 m 和 n。代码如下:
设置函数的返回值使用 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) }
【实例】某顾客去商场购物,购买的商品信息如下:
- 华为手机:单价2699元,购买数量 2 部。
- 戴尔笔记本电脑:单价3666元,购买数量 3 台。
定义一个带有两个参数的函数 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 岁
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。