文章目录
GoLang之图解函数调用栈
1.前言
2.理论知识
2.1函数调用栈结构
2.2函数调用栈状态变化
3.函数栈帧
func A() {
var a1, a2, r1, r2 int64
a1, a2 = 1, 2
r1, r2 = B(a1, a2)
r1 = C(a1)
println(r1, r2)
}
func B(p1, p2 int64) (int64, int64) {
return p2, p1
}
func C(p1 int64) int64 {
return p1
}
4.返回值
func incr(a int) int {
var b int
defer func(){
a++
b++
}()
a++
b = a
return b
}
func main(){
var a,b int
b = incr(a)
println(a,b) //0,1
}
func incr(a int) (b int) {
defer func(){
a++
b++
}()
a++
return a
}
func main(){
var a,b int
b = incr(a)
println(a,b) //0,2
}
5.函数跳转与返回
func A(){
a,b := 1,2
B(a,b)
return
}
func B(c,d int){
println(c,d)
return
}