GO语言中defer和return的错误认识以及纠正
1.defer在return后调用
//defer与return的先后关系
//defer在return后调用
var name string = "go"
func myfunc() string {
defer func() {
name = "python"
}()
fmt.Printf("myfunc 函数里的name:%s\n", name)
return name
}
func main(){
myname := myfunc()
fmt.Printf("main 函数里的name: %s\n", name)
fmt.Println("main 函数里的myname: ", myname)
}
2 重点:return返回的参数个数、类型、变量名的指定
func1() (i int)//这里的最后一个括号(i int)指明了返回的参数个数、类型以及返回值的变量名(该变量名可在函数中修改)
// 带有变量名的返回值,func1()后面的括号表示的是返回值的类型、个数
func func1() (i int) {
i = 10
defer func() {
i += 1
}()
return 5
}
func main() {
closure := func1()
fmt.Println(closure)//6
}