GoSuda

5 Características de Design da Linguagem Go sob a Perspectiva da Engenharia de Sistemas e de Backend

By Rabbit Princess views ...

Introdução

Linguagens de programação são ferramentas para construir produtos. Usar simplesmente uma determinada linguagem não define o nível de competência de um desenvolvedor. No entanto, a escolha de uma linguagem e a forma como ela é utilizada podem influenciar diretamente a maneira de pensar de um desenvolvedor e a direção do seu crescimento. Em especial, sair da linguagem que se usa atualmente e compará-la com outras contribui muito para ampliar a visão técnica e desenvolver a sensibilidade em relação à essência das coisas. Neste texto, pretendo discutir, em cinco aspectos, por que escolhi Go e de que modo ela auxilia o crescimento do desenvolvedor.

1. Go é uma linguagem que equilibra desempenho e produtividade.

Existem inúmeras linguagens de programação no mundo, e cada uma possui vantagens e desvantagens conforme suas características.

  • C oferece excelente desempenho e controle de baixo nível, mas exige que o desenvolvedor gerencie a memória diretamente e, por carecer de recursos de alto nível, apresenta baixa produtividade e dificuldade de manutenção.
  • C++ e Rust oferecem diversos recursos avançados, como orientação a objetos, templates e metaprogramação, mas possuem sintaxe complexa, curva de aprendizado íngreme e tempos de compilação lentos, o que os torna pouco adequados para implantações frequentes.
  • Java e C# proporcionam portabilidade entre plataformas e estabilidade, sendo amplamente utilizados em serviços de grande porte, porém executam em máquinas virtuais pesadas, o que torna a implantação e o ambiente de execução complexos e eleva a exigência de recursos.
  • Python e JavaScript são adequados para o desenvolvimento rápido graças à sintaxe concisa e ao ecossistema rico, mas apresentam desempenho de execução inferior e menor confiabilidade do ecossistema, revelando limitações estruturais em sistemas de grande escala.

Por outro lado, Go é uma linguagem que alcança um equilíbrio notável entre desempenho e produtividade. Por ser uma linguagem compilada, como C, Go garante alto desempenho de execução e, ao mesmo tempo, oferece, graças à rapidez de compilação, a flexibilidade de implantação típica de linguagens interpretadas. Ou seja, Go é uma linguagem equilibrada, sem desvantagens evidentes, que pode ser utilizada de forma estável na maioria dos ambientes.

2. Go impede a programação de culto à carga (cargo cult).

Durante a Segunda Guerra Mundial, as forças aliadas construíram bases aéreas em ilhas do Pacífico para auxiliar no conflito. Grandes quantidades de suprimentos e equipamentos militares alteraram profundamente a vida dos militares e dos habitantes nativos. Os moradores viram, pela primeira vez, aviões trazendo roupas manufaturadas, alimentos enlatados e outros bens. Quando a guerra terminou, as bases foram abandonadas e a carga deixou de chegar. Assim, os habitantes das ilhas passaram a imitar os militares: vestiam-se como controladores de tráfego aéreo, soldados e marinheiros, construíram pistas de pouso rudimentares e usavam bastões para sinalizar o pouso às aeronaves. Continuaram marchando para que a carga caísse de paraquedas das aeronaves. No entanto, as aeronaves que eles aguardavam nunca chegaram.

A programação de culto à carga refere-se ao hábito de desenvolvedores que imitam a aparência de código ou de tecnologias sem compreender seus princípios. Na programação contemporânea, especialmente no desenvolvimento web, esse hábito de copiar sem compreender o significado é comum. Frameworks como React, Next, Spring e Django tornaram possível desenvolver sem conhecer sua estrutura interna, mas muitas vezes o desenvolvedor não sabe reagir até mesmo a um pequeno erro. Somando-se a isso as ferramentas recentes de geração de código por IA, intensifica-se o modo de desenvolvimento que copia e cola resultados, em vez de escrever o código diretamente ou compreender seus princípios.

Go combate esse problema de forma fundamental, no nível de sua filosofia de linguagem. Go é uma linguagem projetada em torno da biblioteca padrão, e não de frameworks. O desenvolvedor pode construir um servidor web de nível de serviço real apenas com bibliotecas básicas como net/http e database/sql, e, por meio disso, desenvolve naturalmente a intuição e a compreensão de estruturas de baixo nível, como rede, banco de dados e E/S. Essa estrutura, que permite aprender os fundamentos de forma sólida sem depender de frameworks, constitui a base para que o desenvolvedor cresça continuamente sem perder de vista a essência da tecnologia.

3. Go oferece um modelo de concorrência poderoso.

Os processadores modernos evoluem não pela elevação da velocidade de um único núcleo, mas pelo aproveitamento paralelo de múltiplos núcleos para melhorar o desempenho. Com isso, a concorrência, que permite a um programa processar várias tarefas simultaneamente, tornou-se essencial, e a importância de uma linguagem capaz de projetá-la e implementá-la de forma eficiente cresce cada vez mais. Go é uma linguagem otimizada para esse ambiente. Goroutine é a thread leve fornecida pelo Go, que pode ser criada com uma pilha de apenas alguns KB e, mesmo com milhares em execução simultânea, consome quase nenhum recurso do sistema. O runtime do Go distribui eficientemente um grande número de goroutines entre as threads do sistema operacional por meio de seu próprio escalonador M:N, e esse processo é otimizado automaticamente, sem intervenção direta do desenvolvedor. Assim, o desenvolvedor pode projetar a lógica de concorrência de maneira segura e consistente, sem lógica de sincronização complexa ou escalonamento personalizado.

Além disso, Go oferece suporte ativo a um design de concorrência moderno, com ferramentas de sincronização como mutex e waitGroup, além de channel e context. Graças a essa estrutura, o desenvolvedor pode adquirir, de maneira natural, uma percepção prática de concorrência e paralelismo sem se prender a teorias complexas, e alcançar, a partir do zero, um nível elevado de abstração e capacidade de projeto aplicável.

4. Go é uma linguagem criada por excelentes desenvolvedores que mantiveram o rumo.

Go foi criada pelo Google, sob a liderança de Robert Griesemer, Rob Pike e Ken Thompson, desenvolvedores lendários. Em particular, eles são os criadores do Unix e da linguagem C, mestres em compiladores e software de sistemas, e isso, por si só, comprova a confiabilidade técnica de Go. Somam-se a isso a experiência prática de inúmeros engenheiros do Google e o conhecimento acumulado na operação de serviços de grande escala, de modo que Go, desde o início, busca a solução de problemas reais e tem evoluído com uma filosofia e uma direção coerentes.

Outras linguagens frequentemente causam confusão para comunidades e usuários por causa de quebras de compatibilidade, mudanças de design, licenças instáveis e ecossistemas não padronizados. Por exemplo, o Python teve seu ecossistema dividido por anos devido à quebra de compatibilidade entre as versões 2 e 3; o Java passou a enfrentar, após a aquisição pela Oracle, uma política de licenciamento instável, o que levou muitas empresas a hesitar em sua adoção; e o Node.js ainda não oferece um sistema de módulos consistente, pois CJS e ESM coexistem.

Em contraste, Go é uma linguagem que tem a consistência e a estabilidade como valores prioritários. A equipe do Go mantém rigorosamente a compatibilidade com versões anteriores e, ao introduzir novos recursos, adota de forma consistente uma integração gradual, para que não entrem em conflito com o código existente. Quanto à sintaxe, evita palavras-chave desnecessárias e limita a abstração excessiva, impedindo que a própria linguagem se torne desnecessariamente complexa. Além disso, um conjunto de ferramentas oficiais e consistentes, como go fmt, go mod, go build e go test, orienta todos os projetos Go a adotarem o mesmo ambiente de desenvolvimento e a mesma estrutura. A biblioteca padrão, robusta e prática, dispensa frameworks adicionais e oferece suporte fiel à maior parte das funcionalidades necessárias no desenvolvimento real, como servidores web, processamento de arquivos e integração com bancos de dados.

5. O Gopher é adorável.

Gopher1

Gopher2

Gopher3