Golang

Introdução ao Go: história, filosofia e os criadores da linguagem Já leu

8 min de leitura

Introdução ao Go: história, filosofia e os criadores da linguagem
Talvez você se pergunte: Por que mais uma linguagem de programação? No final dos anos 2000, os engenheiros do Google enfrentavam um pro

Talvez você se pergunte: Por que mais uma linguagem de programação? No final dos anos 2000, os engenheiros do Google enfrentavam um problema concreto. Os sistemas da empresa cresciam em escala e complexidade a uma velocidade que as ferramentas disponíveis não acompanhavam com conforto. C++ oferecia desempenho, mas seus tempos de compilação eram dolorosamente lentos e sua complexidade sintática exigia esforço considerável da equipe. Java resolvia parte da produtividade, mas carregava o peso de uma máquina virtual e de um ecossistema verboso. Python era ágil para escrever, porém insuficiente para sistemas de alto desempenho e concorrência massiva.

Foi nesse cenário que três engenheiros experientes decidiram projetar algo novo do zero — não por vaidade intelectual, mas por necessidade prática.


Os criadores

Robert Griesemer é engenheiro de compiladores com décadas de experiência. Trabalhou no compilador V8 do JavaScript e no sistema de tipos do Java. Sua contribuição para Go está profundamente ligada ao design do compilador e ao sistema de tipos da linguagem.

Rob Pike é um veterano da computação. Trabalhou nos laboratórios Bell, onde participou do desenvolvimento do sistema operacional Plan 9 e da codificação UTF-8, ao lado de Ken Thompson. É também co-autor do livro clássico The Unix Programming Environment. Em Go, Pike influenciou fortemente a filosofia de simplicidade e a abordagem à concorrência.

Ken Thompson dispensa apresentações no mundo da computação. Criador do Unix, co-inventor da linguagem B (predecessora do C) e co-desenvolvedor do UTF-8, Thompson trouxe para o Go décadas de sabedoria sobre o que faz um sistema ser duradouro e eficiente. Sua participação no projeto foi fundamental nas fases iniciais de design.

Os três iniciaram as discussões sobre a linguagem em setembro de 2007, enquanto aguardavam a compilação de um sistema em C++ que levava cerca de 45 minutos. A lenda conta que foi justamente nessa espera improdutiva que a conversa sobre "como uma linguagem ideal seria" se tornou um projeto concreto.


A linha do tempo

  • Setembro de 2007 — Griesemer, Pike e Thompson iniciam o design da linguagem internamente no Google.
  • Novembro de 2009 — Go é anunciada publicamente como um projeto open source. A data, 10/11/2009, é considerada o nascimento oficial da linguagem.
  • Março de 2012 — Lançamento do Go 1.0, com a promessa de estabilidade de API que persiste até hoje. Programas escritos para Go 1.0 compilam e funcionam corretamente nas versões mais recentes.
  • 2015 — Introdução do garbage collector com pausas de sub-milissegundo, tornando Go ainda mais adequado para serviços de baixa latência.
  • 2021 — Go 1.18 trouxe Generics, a adição mais significativa à linguagem em anos, respondendo a uma das demandas mais antigas da comunidade.
  • 2024/2025 — A linguagem consolida sua posição entre as mais usadas para desenvolvimento de backends, ferramentas de DevOps e infraestrutura cloud.

A filosofia da linguagem

Go foi desenhada com um conjunto de princípios muito deliberados, e entendê-los é tão importante quanto aprender a sintaxe.

Simplicidade acima de tudo. A linguagem tem poucas palavras-chave — apenas 25. Não existe sobrecarga de operadores, não existe herança de classes, não existe manipulação de exceções com try/catch. Cada decisão de design foi guiada pela pergunta: isso é realmente necessário?

Compilação rápida. Um dos objetivos originais era que grandes bases de código compilassem em segundos, não minutos. Isso impacta diretamente a produtividade no dia a dia.

Concorrência como cidadã de primeira classe. Go foi projetada para o mundo multicore. Goroutines e channels são parte da linguagem, não bibliotecas externas. Rodar milhares de tarefas concorrentes é natural em Go.

Um único jeito de formatar o código. A ferramenta gofmt formata qualquer código Go de forma padronizada. Não existem guerras de tabs versus espaços em times que usam Go — o formatador decide, e todos aceitam.

Erros são valores. Go não usa exceções. Funções retornam o resultado e um valor de erro. O programador é obrigado a decidir explicitamente o que fazer quando algo dá errado. Isso parece verboso no início, mas produz código mais previsível e auditável.


Um primeiro programa

O melhor jeito de sentir uma linguagem é lê-la. Abaixo está o programa mais clássico possível, com alguns elementos extras para ilustrar a estrutura.

package main

import "fmt"

func main() {
    fmt.Println("Olá, mundo. Bem-vindo ao Go.")
}

Algumas observações importantes sobre esse código mínimo:

  • Todo programa executável em Go pertence ao pacote main.
  • A função main é o ponto de entrada — sem ela, o compilador recusa o programa.
  • import "fmt" traz o pacote de formatação da biblioteca padrão. Diferente de outras linguagens, Go não permite importações que não sejam usadas: isso causa erro de compilação.
  • Não há ponto e vírgula ao final das linhas — o compilador os insere automaticamente.

Go na prática: onde a linguagem é usada

Conhecer os casos de uso reais ajuda a compreender para onde os estudos devem apontar.

Infraestrutura e DevOps. Docker, Kubernetes, Terraform, Prometheus e o próprio CLI do GitHub foram escritos em Go. A linguagem tornou-se o padrão de fato para ferramentas de infraestrutura cloud.

Backends de alta performance. Empresas como Uber, Twitch, Cloudflare, Dropbox e o próprio Google usam Go em serviços que precisam responder a milhões de requisições com baixa latência.

Ferramentas de linha de comando. A capacidade de compilar um binário estático único, sem dependências externas, torna Go ideal para CLIs distribuídas.

APIs e microserviços. Frameworks como Gin, Echo e Fiber tornaram Go uma escolha popular para times que constroem APIs RESTful performáticas.


Go versus outras linguagens: uma perspectiva honesta

Go não é a linguagem certa para tudo, e seus criadores nunca afirmaram o contrário.

Para sistemas de tempo real extremo, onde cada microssegundo importa, C e Rust ainda levam vantagem pela ausência de garbage collector. Para análise de dados e machine learning, Python domina pelo ecossistema. Para aplicações corporativas com regras de negócio complexas, Java e Kotlin têm ecossistemas mais maduros.

O ponto forte de Go está na interseção entre produtividade de desenvolvimento e performance em produção. Equipes que usam Go reportam com frequência que conseguem escrever código correto e eficiente mais rápido do que em linguagens de sistemas tradicionais, sem abrir mão de desempenho comparável.


O que vem a seguir

Nos próximos artigos, o ambiente de desenvolvimento será configurado e os primeiros programas reais serão escritos. A progressão será gradual e cada conceito será construído sobre o anterior.

O mais importante neste momento é compreender que Go é uma linguagem com propósito claro, nascida de problemas reais enfrentados por engenheiros experientes. Essa origem pragmática se reflete em cada decisão de design — e é exatamente essa característica que torna o seu aprendizado tão recompensador.


Referências e leituras complementares

Comentários

Mais em Golang

Instalação, configuração do ambiente e o comando `go`
Instalação, configuração do ambiente e o comando `go`

  Antes de escrever código, o ambiente que precisaremos deve est...

Interfaces: contratos implícitos e polimorfismo
Interfaces: contratos implícitos e polimorfismo

  Interfaces existem em Java, C#, TypeScript e diversas outras linguage...

Maps: criação, iteração e boas práticas
Maps: criação, iteração e boas práticas

Se slices são a espinha dorsal das sequências em Go, maps s&atil...