Introdução ao Go
O Go (Golang), é uma linguagem de programação criada pelo Google para construir programas simples de manter, rápidos para compilar e bons para lidar com tarefas de servidor, rede e concorrência.
Ela é uma linguagem compilada, o que significa que o código escrito em Go é transformado em um programa executável antes de rodar. Isso é diferente de linguagens como Python, que normalmente executam o código por meio de um interpretador.
O Go também é uma linguagem de tipagem estática, ou seja, os tipos dos valores são conhecidos e verificados antes do programa rodar. Um "tipo" informa qual o valor será armazenado em uma variável, como número, texto ou valor verdadeiro/falso. Isso ajuda a encontrar vários erros mais cedo.
Por que Go foi criado
O Go foi criado porque algumas linguagens usadas em sistemas grandes tinham problemas práticos. Em linguagens como C e C++, era possível criar programas muito rápidos, mas o código podia ficar complexo, a compilação podia ser lenta e o gerenciamento de memória exigia bastante cuidado.
Em linguagens mais simples e produtivas, como Python, o desenvolvimento era mais rápido, mas o desempenho e a distribuição do programa nem sempre eram ideais para certos tipos de sistemas. O Go tenta ficar em um meio-termo.
Ele busca ter uma sintaxe simples, uma compilação rápida, bom desempenho e ferramentas oficiais bem integradas. Isso faz com que seja uma linguagem boa para projetos onde o código precisa crescer sem virar algo difícil de manter.
Por que Go é usado
O Go é muito usado porque resolve bem problemas comuns em sistemas modernos. Ele é usado para criar APIs, servidores web, ferramentas de linha de comando, serviços de infraestrutura, programas que trabalham com rede e sistemas que precisam executar várias tarefas ao mesmo tempo.
Uma característica forte da linguagem é a concorrência. A Concorrência significa organizar um programa para lidar com várias tarefas em andamento, mesmo que elas não estejam sendo executadas exatamente no mesmo instante. Isso aparece muito em servidores, por exemplo, quando várias requisições chegam ao mesmo tempo.
Para essa tarefa, o Go tem um recurso chamado goroutine, que será estudado depois. Por enquanto, basta entender que goroutines são uma forma leve de executar tarefas concorrentes sem precisar lidar diretamente com detalhes mais baixos do sistema operacional.
Onde Go se encaixa melhor
O Go se encaixa muito bem em programas de backend, por isso, criar ferramentas de infraestrutura é muito simples e tem bom desempenho. Muitos projetos usados em servidores, containers, automação e cloud foram escritos em Go porque a linguagem gera binários simples de distribuir e tem bom suporte para rede e concorrência.
Alguns exemplos de uso onde Go costuma funcionar bem são:
- APIs REST
- servidores HTTP
- microsserviços
- ferramentas de terminal
- aplicações de rede
- serviços que precisam processar várias requisições ao mesmo tempo
- sistemas que precisam ser fáceis de compilar e distribuir
Quando Go pode não ser a melhor escolha
Infelzimente o Go não é a melhor opção para tudo, quando falamos de scripts rápidos, automações simples e análise de dados, Python costuma ser mais confortável por ter uma sintaxe mais flexível e muitas bibliotecas prontas para esse tipo de tarefa.
Para aplicativos mobile com interface visual, Dart com Flutter costuma se encaixar melhor, porque já foi pensado para construir telas e aplicativos multiplataforma. Para sistemas de nível muito baixo, como drivers, kernels ou partes muito próximas do hardware, C ainda pode ser uma escolha melhor, porque permite controle mais direto da memória e do ambiente de execução.
O Go também pode parecer simples demais em alguns casos. Ele evita muitos recursos avançados presentes em outras linguagens. Isso ajuda na clareza, mas pode incomodar quem gosta de linguagens com muitos estilos de abstração.
Por que o Go nasceu
O Go nasceu dentro do Google em 2007, a partir de uma frustração bem prática. Os projetos grandes estavam ficando difíceis de compilar, difíceis de manter e difíceis de entender com as linguagens e ferramentas usadas na época.
O ponto principal era que, linguagens como C e C++ davam desempenho e controle, mas cobravam issoo preço em complexidade. Já linguagens como Python e JavaScript deixavam programar de forma mais leve, mas perdiam em segurança de tipos, desempenho e previsibilidade para certos sistemas.
Quando Go começou a ser pensado, computadores com vários núcleos já estavam ficando comuns. Isso muda bastante a forma de escrever programas, porque muitos sistemas precisam fazer várias coisas ao mesmo tempo. Só que muitas linguagens não ajudavam tanto nessa parte. Por isso, Go colocou concorrência como algo importante desde o começo, em vez de tratar isso como um detalhe externo ou uma biblioteca qualquer.
Outro motivo forte foi o tempo de compilação, em projetos grandes, compilar devagar atrapalha o ciclo de desenvolvimento, que é: escreve código, compila, testa, corrige, compila de novo. Se cada etapa demorar muito, o ato de programar fica prejudicado. Uma apresentação inicial sobre Go resumiu esse incômodo dizendo que linguagens compiladas e estaticamente tipadas da época, como C, C++ e Java, exigiam muita digitação, muita repetição e compilavam devagar demais.
Criadores do Go
Os três criadores iniciais foram Robert Griesemer, Rob Pike e Ken Thompson. Ken Thompson é uma figura muito importante porque foi co-criador do Unix, trabalhou em Plan 9 e também participou da criação da linguagem B, que veio antes de C.
Isso explica porque o Go tem cara de linguagem feita por gente que conhece sistemas de verdade, não por gente tentando inventar moda. Ela tem chaves como C, compila para binário como C e mantém uma ideia de código direto, só que tira várias partes que tornam C mais difícil para começar e para manter projetos grandes.
O Rob Pike também vem dessa tradição de sistemas, ele trabalhou com Unix, Plan 9 e com Ken Thompson no UTF-8, que é uma codificação de texto usada amplamente na web. A participação dele ajuda a explicar a pegada simples e prática do Go, principalmente a ideia de que uma linguagem deve ajudar o programador a construir software real sem ficar brigando com excesso de detalhes.
O Robert Griesemer teve um papel muito forte no lado de linguagem, compilador e especificação. Em uma apresentação oficial sobre como Go foi feito, aparece que o primeiro artefato do projeto foi a especificação da linguagem.
Com o tempo, outras pessoas importantes entraram no projeto, e muitas outras contribuem com ele.