Files
bulma/escape/closure_escape.go
T

33 lines
637 B
Go

package main
import "fmt"
type Person4 struct {
Name string
Age int
}
// closureEscape 返回闭包,捕获的变量逃逸
func closureEscape() func() *Person4 {
p := &Person4{Name: "Closure Person", Age: 30} // p 逃逸至堆
return func() *Person4 {
return p // 闭包引用p,延长其生命周期
}
}
// goroutineClosure 协程中使用闭包,捕获变量逃逸
func goroutineClosure() {
x := 100 // x 逃逸至堆
go func() {
fmt.Printf("协程闭包捕获:%d\n", x)
}()
}
func main() {
closureFunc := closureEscape()
p := closureFunc()
fmt.Printf("闭包捕获变量:%+v\n", *p)
goroutineClosure()
}