El análisis de escape es una optimización del compilador de Go que decide, valor por valor, si una variable puede vivir en la pila o debe trasladarse al montón. La pila es una región por gorutina donde las asignaciones son muy baratas y se liberan al retornar la función; el montón es una memoria compartida de mayor vida que el recolector de basura debe gestionar. Un valor "escapa" cuando el compilador no puede demostrar que dejará de usarse antes de que la función termine: si existe alguna referencia que sobreviva a la función, el valor se asigna al montón.
Los casos más habituales de escape son cuatro: devolver un puntero a una variable local, capturar variables en clausuras o gorutinas que pueden sobrevivir a la función, pasar valores concretos a través de interfaces (algo frecuente en formateo y logging) y almacenar valores en estructuras como slices, mapas o structs cuya vida excede la de la función. Devolver punteros es idiomático en Go y no siempre es un problema; la decisión depende del diseño de la API y del rendimiento medido, no de reglas genéricas.
Las decisiones de escape no son inmutables: cambian según la versión de Go, el sistema operativo y arquitectura, los flags del compilador y optimizaciones como el inlining. Por eso, la única forma fiable de saber qué ocurre es inspeccionar la salida del compilador con go build -gcflags="-m" ./..., que muestra los movimientos a montón, los escapes y las decisiones de inlining. GoLand incorpora además visualizaciones que facilitan interpretar ese resultado, poco amigable en texto plano. Comprender el análisis de escape es una habilidad imprescindible para optimizar código Go sin recurrir a conjeturas.
