Quatorze Anos de Go

Quatorze anos após seu lançamento, a linguagem Go é amplamente vista como uma infraestrutura “chata, mas confiável”: fácil de aprender, rápida para compilar, com ferramentas fortes e uma biblioteca padrão que impulsiona grande parte do ecossistema atual de cloud e DevOps (Docker, Kubernetes, Terraform e mais). Os comentaristas contrastam o conjunto de recursos deliberadamente minimalista de Go com linguagens mais ricas, porém mais complexas, como Rust, Java e Python, debatendo trade-offs em torno de generics, a falta de tipos soma e segurança contra null, tratamento de erros e ergonomia de concorrência. Muitos veem a compatibilidade retroativa de Go e o deploy com binário único como grandes forças para serviços backend de longa duração, mesmo quando outros criticam suas limitações de design e o papel central do Google em sua evolução.

Popularidade da linguagem & percepção

  • Os comentaristas observam que Go atrai tanto entusiasmo quanto “language bashing”, muitas vezes enquadrado como “Go não é Rust”.
  • Alguns argumentam que esse bashing é sinal de popularidade e de equipes sendo forçadas a usar Go quando prefeririam outra coisa.
  • Vários veem Go como tendo entrado na categoria de “chato, mas seguro”: menos hype, amplamente usado, com menos advocacy.

Status de “moderna” e pares

  • Go é visto como uma das linguagens mainstream mais jovens em comparação com Java/Python/C++.
  • Muitas vezes é contrastado com Rust, Swift, Kotlin, Java, C#, JavaScript e Python em termos de recursos, segurança e ecossistemas.

Curva de aprendizado & experiência do desenvolvedor

  • Muitos relatam que Go é muito fácil de aprender, especialmente para desenvolvedores de PHP/Python/Java/C.
  • Outros têm dificuldade com a sintaxe/semântica de Go e/ou Rust e recebem o conselho de escolher uma, não ambas, e construir projetos reais.
  • As ferramentas (formatador, linter, suporte de IDE, harness de testes/bench) são repetidamente elogiadas.

Pontos fortes comumente elogiados

  • Compilação rápida e binários estáticos pequenos.
  • Biblioteca padrão sólida, especialmente para rede e HTTP.
  • Deploy simples (um único binário), boa adequação para cloud-native e ferramentas CLI.
  • Primitivas de concorrência (goroutines, channels) vistas como poderosas, com bom desempenho.
  • A compatibilidade retroativa do Go 1 é destacada como um grande trunfo.

Críticas & recursos ausentes

  • Reclamações frequentes sobre:
    • nil e a falta de tipos option/result ou segurança contra null.
    • Enums fracos e ausência de tipos soma/pattern matching.
    • Tratamento de erros verboso e fácil de esquecer (if err != nil).
    • Pontas ásperas em interfaces, generics e reflection.
  • Alguns veem Go como excessivamente restritivo/minimalista; outros apreciam isso por reduzir o over-engineering.

Concorrência & panics

  • Debate sobre se Go realmente tem “ótima ergonomia de concorrência”.
  • Comparações com Erlang/Elixir sugerem que as primitivas de Go são fáceis de usar, mas difíceis de usar corretamente, com riscos de races e deadlocks.
  • O fato de um panic não recuperado em qualquer goroutine derrubar o programa inteiro é visto como um defeito de design significativo; há um debate estendido sobre se panics deveriam ser recuperáveis e como isso se compara ao Rust.

Filosofia de design, ecossistema & longevidade

  • Ênfase repetida de que Go deliberadamente mantém o conjunto de recursos pequeno, priorizando legibilidade e manutenção sobre expressividade.
  • Alguns se preocupam com a dependência do Google; outros argumentam que o status open-source e a adoção ampla tornam seu futuro relativamente seguro.
  • Go é visto como excelente para serviços de backend, ferramentas de infra/devops e para “fazer as coisas”, mas não como uma boa opção (hoje) para ML, computação científica, gráficos ou trabalho pesado em desktop/embedded.