¿Cómo se identifica un procedimiento como cercano o lejano?

Un procedimiento se identifica como cercano o lejano según la ubicación de la función que se llama. Si la función está definida en el mismo paquete Go que el código que la llama, entonces se considera que la función está cerca. Si la función está definida en un paquete Go diferente, entonces se considera que la función está lejos.

La diferencia entre funciones cercanas y lejanas solo es significativa cuando se usa la declaración defer para manejar pánicos o cerrar recursos al final de una función. Cuando se encuentra una declaración de aplazamiento, el tiempo de ejecución de Go insertará una variable en una pila que almacena la función responsable de manejar el aplazamiento. Si la función diferida está cerca, entonces la variable almacenará un puntero a la función en el mismo paquete Go. Si la función diferida está lejos, entonces la variable almacenará un puntero a una función auxiliar que llamará a la función lejos a través de una llamada entre paquetes.

Las llamadas entre paquetes son más caras que las llamadas dentro de un paquete, por lo que generalmente es preferible utilizar funciones cercanas cuando sea posible. Esto se puede hacer organizando su código en paquetes de tal manera que las funciones que necesita usar juntas estén definidas en el mismo paquete.