Go关键字--return

return

return用于在函数内部,退出函数执行过程,

应用场景
1. 退出函数执行过程,不指定返回值
2. 退出函数执行过程,并指定返回值

退出执行,不指定返回值

通常有两种情况不需要指定返回值退出函数执行过程。第一是:函数没有返回值;第二是:函数返回值有变量名,不需要显示的指定返回值。下边通过一个示例来说明这两种情况:

package main

import (
    "fmt"
)

func say(flag bool) {
    if !flag {
        fmt.Println("false")
        return
    }
    fmt.Println("没有返回值")
}

func getStatus() (num int) {
    // num是在返回值中定义的变量
    num = 100
    return
}

func main() {
    say(true)
    say(false)
    fmt.Println(getStatus())
}

上边的示例代码中,say是一个没有返回值的函数,这个函数中的return就是一个不带返回值的退出。getStatus是带一个返回值的函数,由于在返回值中定义了变量,所以,在函数退出时,可以不用显示的在return后边指定函数返回值,函数调用结束后,自动将之前定义的返回值变量作为这个函数的返回结果。

退出函数执行过程,并指定返回值

当函数有返回值时,如果返回值没有定义变量,那么一定要使用return加上返回值退出函数。如下边示例:

package main

import (
    "fmt"
)

// getMsg函数需要返回一个string类型值
func getMsg() string {
    return "hello"
}

func main() {
    fmt.Println(getMsg())
}

在返回值中定义变量,而return其他结果

在函数定义时,虽然在返回值中定义了变量,但是在return出函数时,指定另外的变量作为返回结果,这样也是可行的,但是意义却不大。示例代码如下:

package main

import (
    "fmt"
)

func getMsg() (msg string) {
    msg = "world"
    return "hello"
}

func main() {
    fmt.Println(getMsg())
}

输出信息是;

hello

从上边的示例代码中可以发现,在函数返回值中定义变量,只是说明这个函数在return时,没有显示指定返回对象的情况下,默认使用返回值中的变量作为函数的返回结果,如果return时显示的指定了返回对象,那么以显示指定的返回对象作为函数执行的返回结果

在函数递归调用中使用return

递归调用,就是函数在函数体内调用自身。函数在没有结束之前,调用自身,表示嵌套层级增加一层。各个调用层中,函数执行完成,表示这一层执行完成。在函数递归调用中使用return,只会退出当前这一层的函数执行,并不会结束其他层的函数执行过程。使用return可以结束函数执行过程,阻止函数体内后边的代码执行。将对自身的调用写在return后边,可以停止函数的递归调用,如下边示例所示,当index等于5时,结束了函数的执行过程,后边代码中对自身的调用便不会执行。

package main

import (
    "fmt"
)

func getMsg(index int) {
    if index == 5 {
        fmt.Println("递归调用嵌套层级达到5层,结束递归")
        return
    }

    fmt.Println("递归调用层级是:", index)
    getMsg(index + 1)
}

func main() {
    var index = 1
    getMsg(index)
}

输出信息是:

递归调用层级是: 1
递归调用层级是: 2
递归调用层级是: 3
递归调用层级是: 4
递归调用嵌套层级达到5层,结束递归

为什么输出的结果都是5呢?因为

猜你喜欢

转载自blog.csdn.net/hzwy23/article/details/79918904