Go 语言原本 under the hood
Go 语言原本

第 6 章 函数、延迟与恐慌

由此而言,ALGOL 里的过程在某种意义上是二等公民,它们永远只能亲自现身,无法由一个变量或表达式来代表。
Thus in a sense procedures in ALGOL are second class citizens, they always have to appear in person and can never be represented by a variable or expression.
-- Christopher Strachey, "Fundamental Concepts in Programming Languages"

让函数成为「一等公民」,意味着它能像普通值一样被赋值、传递、返回,还能捕获环境成为闭包。这份在 Strachey 时代尚属奢侈的能力,正是本章要拆解的对象:函数值在内存里如何表示,一次调用在底层如何 传参与返回,defer 怎样保证「无论从哪条路径离开,清理都会发生」,以及 panicrecover 如何在调用栈上展开又被截住。这些特性共享同一套运行时机器,把它讲透,就能看清 Go 在便利、性能与 显式控制流之间所做的取舍。