此页面描述了 Go 编译器中的函数内联过程。函数内联是一种优化,编译器会将函数调用替换为被调用函数的函数体,从而消除调用开销并实现进一步的优化。内联过程包括两个主要阶段:确定哪些函数适合内联以及执行实际的函数调用内联。
Go 编译器分两个阶段做出内联决策,如 src/cmd/compile/internal/inline/inl.go5-8 中所述:
CanInline:确定哪些函数适合内联,并保存其函数体和声明信息的副本。InlineCalls:通过用保存的函数体替换函数调用来展开对可内联函数的调用。