
đ Go Language āĻ Closure + Escape Analysis
āĻĒā§āϰā§āĻā§āϰāĻžāĻŽāĻŋāĻ-āĻ closure āĻāĻāĻāĻž āĻĻāĻžāϰā§āĻŖ āĻāύāϏā§āĻĒā§āĻāĨ¤
Closure āĻŽāĻžāύ⧠āĻšāϞ⧠â āĻāĻāĻāĻž function, āϝā§āĻāĻž outer function āĻāϰ āĻā§āϤāϰā§āϰ variable āĻā§ "āĻŽāύ⧠āϰāĻžāĻā§", āĻāĻŽāύāĻāĻŋ outer function āĻļā§āώ āĻšāϝāĻŧā§ āĻā§āϞā§āĻāĨ¤
đ Example in Go:
func counter() func() int {
x := 0
return func() int {
x++
return x
}
}
āĻāĻāĻžāύ⧠counter() āĻĢāĻžāĻāĻļāύ return āĻāϰāĻā§ āĻāĻāĻāĻž inner functionāĨ¤
Inner function āĻāĻāύāĻ x āĻā§āϝāĻžāϰāĻŋāϝāĻŧā§āĻŦāϞ āĻŽāύ⧠āϰāĻžāĻāĻā§āĨ¤
āϤāĻžāĻšāϞ⧠āĻĒā§āϰāĻļā§āύ āĻāϏāϞ⧠â outer function āϤ⧠āĻļā§āώ āĻšāϝāĻŧā§ āĻā§āĻā§,x āĻŦā§āĻāĻā§ āϰāĻāϞ⧠āĻāĻŋāĻāĻžāĻŦā§? đ¤
āĻāĻāĻžāύā§āĻ āĻāϏ⧠Escape AnalysisāĨ¤
Go compiler āĻāĻāĻāĻž process āĻāĻžāϞāĻžāϝāĻŧ āϝā§āĻāĻžāĻā§ āĻŦāϞ⧠escape analysisāĨ¤
āĻāĻāĻž basically āĻā§āĻ āĻāϰ⧠â āĻā§āύ āĻā§āϝāĻžāϰāĻŋāϝāĻŧā§āĻŦāϞ stack āĻ āĻĨāĻžāĻāĻŦā§ āĻāϰ āĻā§āύāĻāĻž heap āĻ escape āĻāϰāĻŦā§āĨ¤
đ āĻāĻĒāϰā§āϰ āĻā§āĻĄ x â heap āĻ āĻāϞ⧠āĻā§āĻā§āĨ¤
āĻāĻžāϰāĻŖ closure āĻĢāĻžāĻāĻļāύ return āĻšāĻā§āĻā§, āĻāϰ āϤāĻžāϰ āĻŦāĻžāĻāϰ⧠āĻĨā§āĻā§āĻ x āĻāϰ āĻĻāϰāĻāĻžāϰ āĻšāĻā§āĻā§āĨ¤
đ Bottom line:
Local variable āĻšāϞ⧠â normally stack āĻ āĻĨāĻžāĻā§
Closure āĻŦāĻž long-living object āĻšāϞ⧠â escape āĻāϰ⧠heap āĻ āϝāĻžāϝāĻŧđĄ āĻāĻŽāĻžāϰ āĻŽāϤ⧠āĻļā§āϰā§āϤ⧠closure āĻŦā§āĻāĻž āĻāϰā§āϰāĻŋ, āĻāĻžāϰāĻŖ āĻāĻāĻž āĻšāϞ⧠conceptāĨ¤ āϤāĻžāϰāĻĒāϰ naturally curiosity āĻāϏāĻŦā§ â âvariable āĻŦāĻžāĻāĻāϞ⧠āĻāĻŋāĻāĻžāĻŦā§?â â āϤāĻāύ escape analysis āĻŦā§āĻāĻž easy āĻšāϝāĻŧā§ āϝāĻžāĻŦā§āĨ¤
đ āĻāĻĒāύāĻžāϰ āĻŽāϤ⧠Go āĻļā§āĻāĻžāϰ āĻļā§āϰā§āϤ⧠closure & escape analysis â āĻā§āύāĻāĻž āĻāĻā§ āĻŦā§āĻāĻž āĻāĻāĻŋāϤ?
Top comments (0)