Armadilha Surpreendente de Alocação de Memória em Go: Uma História de Regressão de 30%
2025-04-21

Uma refatoração aparentemente inócua em um projeto Go levou a uma regressão de desempenho de 30%. O culpado foi o método `GetBytes` da struct `ImmutableValue`, que usava um receptor de valor, causando uma alocação de heap a cada chamada. Alocação de heap é significativamente mais cara do que alocação de pilha. A causa raiz foi a análise de escape do compilador Go sendo imprecisa; ele falhou em reconhecer que o receptor de valor não escaparia. Mudar para um receptor de ponteiro resolveu o problema. Este caso destaca a importância de entender as decisões de alocação de memória do compilador Go e usar tipos de receptor apropriados para código Go de alto desempenho.
Desenvolvimento