返回值

Go语言中通过return关键字向外输出返回值;如果有返回值,必须在外层添加return。
如果没有返回值,可以省略最后的返回信息。

多返回值

Go语言中函数支持多返回值,函数如果有多个返回值时必须用()将所有返回值包裹起来。
函数可以返回多个值,返回值声明,可以只声明类型;

返回值顺序是return的顺序而非在函数头声明的顺序。

  1. package main
  2. func change(a, b int) (x, y int) {
  3. x = a + 100
  4. y = b + 100
  5. return //101, 102
  6. //return x, y //同上
  7. //return y, x //102, 101
  8. }
  9. 不需要强制命名返回值,但是命名后的返回值可以让代码更加清晰,可读性更强

忽略返回值

比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,这样的话代码可以这样写:

  1. v1, v2, _ := function(...)

返回值命名

函数定义时可以给返回值命名,并在函数体中直接使用这些变量,最后通过return关键字返回。
例如:

  1. func calc(x, y int) (sum, sub int) {
  2. sum = x + y
  3. sub = x - y
  4. return
  5. }

返回值补充

当我们的一个函数返回值类型为slice时,nil可以看做是一个有效的slice,没必要显示返回一个长度为0的切片。

  1. func someFunc(x string) []int {
  2. if x == "" {
  3. return nil // 没必要返回[]int{}
  4. }
  5. ...
  6. }
  1. //写一个计算商品价格的函数为例,输入参数是单件商品的价格和商品的个数,两者的乘积为商品总价,作为函数的输出值。
  2. package main
  3. import "fmt"
  4. func calculateBill(price, no int) int {
  5. var totalPrice = price * no
  6. return totalPrice
  7. }
  8. func main() {
  9. price, no := 90, 6
  10. TotalPrice := calculateBill(price, no)
  11. fmt.Println("Total price is :", TotalPrice)
  12. }
  13. ------------------------------- 输出 --------------------------------------
  14. Total price is : 540
  1. //Go 语言支持一个函数可以有多个返回值。我们来写个以矩形的长和宽为输入参数,计算并返回矩形面积和周长的函数 rectProps。矩形的面积是长度和宽度的乘积, 周长是长度和宽度之和的两倍。即:
  2. //
  3. //面积(area) = 长(length) * 宽(width)
  4. //周长(perimeter) = 2 * ( 长 + 宽 )
  5. package main
  6. import "fmt"
  7. func r(length, width float64)(float64, float64) {
  8. var area = length * width
  9. var per = (length + width) * 2
  10. return per,area
  11. }
  12. func main() {
  13. area ,per := r(5.6,3.6)
  14. fmt.Printf("area: %f , per: %f", area, per)
  15. }
  16. ------------------------------- 输出 --------------------------------------
  17. area: 18.400000 , per: 20.160000
  1. //_ 在 Go 中被用作空白符,可以用作表示任何类型的任何值。
  2. //假使我们只需要计算面积,而并不关心周长的计算结果,该怎么调用这个函数呢?这时,空白符 _ 就上场了
  3. package main
  4. import "fmt"
  5. func rect(length, width float64)(float64, float64) {
  6. var area = length * width
  7. var per = 2 * (length + width)
  8. return per, area
  9. }
  10. func main() {
  11. area,_ := rect(3.8,4.9)
  12. fmt.Printf("area: %f", area)
  13. }
  14. // ------------------ 返回值 ---------------------
  15. area: 17.400000