return
go语言中return语句可以带返回值,也支持不带返回值。下面是不带返回值的一些问题。
1、前言
下面这段话来自《Go语言程序设计》p146
可以在有一到多个命名返回值的函数中,写无需声明返回值的return语句。这种情况下,返回值将是命名的返回值,它们在函数入口处被初始化为其类型的零值,并且可以在函数体通过赋值语句来改变它们。
比如下面这个例子:
func main(){
a, b := returnTest()
fmt.Println(a, b)
}
func returnTest()(a int64, b int64){
//直接赋值
a = 1
b = 2
//直接返回,无需声明返回值
return
}
结果
1, 2
1
如果不赋值,函数内就一个return语句,结果为
0, 0
1
2、问题
在上面例子的基础上修改
func main(){
a, b := returnTest()
fmt.Println(a, b)
}
func returnTest()(a int64, b int64){
//直接赋值
a = 1
b = 2
//1、下面这个if语句正常
if true{
a := 3
b := 4
}
/*
2、下面这个if语句报错
报错类型有两种:
result parameter a not in scope at return
inner declaration of var a int64
(对变量b也报同样的错误)
*/
if true{
a := 3
b := 4
return
}
//3、下面这个if语句正常,并且函数返回3, 4
if true{
a := 3
b := 4
return a, b
}
//直接返回,无需声明返回值
return
}