GoSuda

Por que a linguagem Go?

By Rabbit Princess
views ...

Introdução

As linguagens de programação são ferramentas para criar produtos. A habilidade de um desenvolvedor não é determinada apenas pela linguagem que ele utiliza. No entanto, a escolha de uma linguagem e a forma como ela é utilizada podem influenciar diretamente a mentalidade e a direção de crescimento de um desenvolvedor. Em particular, sair da linguagem atual e compará-la com outras pode ser de grande ajuda para expandir a visão técnica e desenvolver um senso de essência. Neste artigo, pretendo discutir por que escolhi Go e como ela ajuda no crescimento de um desenvolvedor, abordando cinco aspectos.

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

Existem inúmeras linguagens de programação no mundo, e todas as linguagens possuem vantagens e desvantagens dependendo de suas características.

  • C oferece excelente desempenho e controle de baixo nível, mas exige que o desenvolvedor gerencie a memória diretamente e carece de recursos de alto nível, resultando em baixa produtividade e dificuldade de manutenção.
  • C++ e Rust suportam uma variedade de recursos avançados, como orientação a objetos, templates e metaprogramação, mas sua sintaxe é complexa, a curva de aprendizado é íngreme e as velocidades de compilação lentas as tornam inadequadas para implantações iterativas.
  • Java e C# são amplamente utilizadas para serviços em larga escala, pois oferecem independência de plataforma e estabilidade, mas são executadas em máquinas virtuais pesadas, o que torna os ambientes de implantação e execução complexos e os requisitos de recursos elevados.
  • Python e Javascript são adequadas para desenvolvimento rápido devido à sua sintaxe concisa e ecossistema rico, mas seu desempenho de execução é inferior e a confiabilidade do ecossistema é baixa, revelando limitações estruturais em sistemas de grande escala.

Por outro lado, Golang é uma linguagem que possui um excelente equilíbrio entre desempenho e produtividade. Como Go é uma linguagem compilada como C, ela garante alto desempenho de execução, ao mesmo tempo em que oferece flexibilidade de implantação de nível de interpretador com velocidades de compilação rápidas. Em outras palavras, Go é uma linguagem equilibrada que pode ser utilizada de forma estável na maioria dos ambientes, sem desvantagens evidentes.

2. Go evita a programação Cargo Cult.

Durante a Segunda Guerra Mundial, as forças aliadas construíram bases aéreas nas ilhas do Pacífico para ajudar no esforço de guerra. A grande quantidade de suprimentos e equipamentos militares mudou drasticamente a vida dos soldados e dos nativos. Os moradores viram pela primeira vez aviões trazendo roupas fabricadas, alimentos enlatados e outros itens. Quando a guerra terminou, as bases foram abandonadas e as cargas não chegavam mais. Então, os moradores da ilha, para imitar os soldados, se vestiam como controladores de tráfego aéreo, soldados e marinheiros, construíam algo semelhante a uma pista de pouso e usavam varas para sinalizar a aeronave para pousar. Eles continuaram a marchar na esperança de que a carga caísse de paraquedas dos aviões. No entanto, os aviões que esperavam não chegaram.

Programação Cargo Cult refere-se ao hábito de desenvolvimento de imitar a aparência de código ou tecnologia sem compreender os princípios subjacentes. Entre os desenvolvedores modernos, especialmente na área de desenvolvimento web, esse hábito de seguir sem entender o significado é comum. Graças a frameworks como React, Next, Spring e Django, o desenvolvimento se tornou possível sem o conhecimento da estrutura interna, mas muitas vezes não se consegue lidar adequadamente com um pequeno erro. Com a adição de ferramentas de geração de código AI recentes, a abordagem de desenvolvimento de copiar e colar resultados, em vez de escrever código diretamente ou entender os princípios, tornou-se ainda mais difundida.

Go, em sua filosofia de linguagem, fundamentalmente evita esses problemas. Go é uma linguagem projetada com foco na biblioteca padrão, e não em frameworks. Os desenvolvedores podem construir um servidor web de nível de serviço real usando apenas bibliotecas básicas como net/http e database/sql, e através disso, naturalmente desenvolvem intuição e compreensão das estruturas de baixo nível, como rede, banco de dados e I/O. Essa estrutura, que permite que os desenvolvedores aprendam os fundamentos solidamente sem depender de frameworks, serve como uma base para que os desenvolvedores continuem a crescer sem perder a essência da tecnologia.

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

As CPUs modernas estão evoluindo na direção de melhorar o desempenho utilizando múltiplos núcleos em paralelo, em vez de aumentar a velocidade de um único núcleo. Consequentemente, a concorrência, onde um único programa pode lidar com múltiplas tarefas simultaneamente, tornou-se uma necessidade, e a importância de linguagens que podem projetar e implementar isso de forma eficiente está crescendo. Go é uma linguagem otimizada para esse ambiente. A goroutine é uma thread leve fornecida por Go, que pode ser criada com apenas alguns KB de stack, e mesmo milhares delas sendo executadas simultaneamente, elas consomem poucos recursos do sistema. O runtime de Go distribui eficientemente inúmeras goroutines para threads do SO através de seu próprio escalonador M:N, e esse processo é otimizado automaticamente sem a necessidade de intervenção direta do desenvolvedor. Isso permite que o desenvolvedor projete lógicas de concorrência de forma segura e consistente, sem lógica de sincronização complexa ou escalonamento personalizado.

Além disso, Go suporta ativamente projetos de concorrência modernos utilizando ferramentas de sincronização como mutex e waitGroup, e channel e context. Graças a essa estrutura, os desenvolvedores podem adquirir um senso prático de concorrência e paralelismo naturalmente, sem se prender a teorias complexas, e podem alcançar um alto nível de abstração e capacidade de design que pode ser utilizado do zero.

4. Go é uma linguagem criada com foco em grandes desenvolvedores.

Go é uma linguagem que nasceu da liderança de desenvolvedores lendários do Google, Robert Griesemer, Rob Pike e Ken Thompson. Em particular, eles são os criadores do Unix e da linguagem C, e mestres nas áreas de compiladores e software de sistema, o que por si só atesta a confiabilidade técnica de Go. Com a incorporação da experiência prática de inúmeros engenheiros do Google e do know-how de operação de serviços em larga escala, Go, desde o início, buscou a resolução de problemas reais e evoluiu com uma filosofia e direção consistentes.

Outras linguagens frequentemente causam confusão para a comunidade e os usuários devido a 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, e o Java, após a aquisição pela Oracle, viu um aumento nos casos em que as empresas hesitam em adotá-lo devido a políticas de licenciamento instáveis. Além disso, o Node.js ainda coexiste com CJS e ESM, não conseguindo fornecer um sistema de módulos consistente.

Por outro lado, Go é uma linguagem que prioriza a consistência e a estabilidade. A equipe Go mantém estritamente a compatibilidade com versões anteriores e, ao introduzir novos recursos, adere a uma abordagem de integração gradual para evitar conflitos com o código existente. A sintaxe também evita palavras-chave desnecessárias e restringe a abstração excessiva, impedindo que a linguagem se torne desnecessariamente complexa. Além disso, as ferramentas oficiais consistentes como go fmt, go mod, go build e go test, levam todos os projetos Go a terem o mesmo ambiente de desenvolvimento e estrutura, e a poderosa e prática biblioteca padrão suporta fielmente a maioria das funções necessárias para o desenvolvimento prático, como servidor web, manipulação de arquivos e integração de banco de dados, sem a necessidade de frameworks separados.

5. Gopher é fofo.

Gopher1

Gopher2

Gopher3