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呢?因为