La expansión en línea es una optimización común en el código compilado que prioriza el rendimiento sobre el tamaño binario. Permite al compilador reemplazar una llamada de función con el cuerpo real de la función; efectivamente copiar / pegar código de un lugar a otro en tiempo de compilación. Dado que el sitio de llamada se expande para contener solo las instrucciones de la máquina que el compilador generó para la función, no tenemos que realizar una LLAMADA o EMPUJAR (el equivalente x86 de una declaración GOTO o un empuje de marco de pila) o su equivalente en otra arquitecturas
El inliner toma decisiones acerca de si debe o no incluir una función basada en una serie de heurísticas, pero en general, ir en línea de forma predeterminada. Debido a que el inliner se deshace de las llamadas a funciones, puede decidir de manera efectiva dónde se le permite al programador anticiparse a una goroutina.
Las llamadas a funciones no se incluirán si cualquiera de las siguientes afirmaciones es verdadera (también hay muchas otras razones, esta lista está incompleta):
...
args) panic
, se recover
, o defer