Bem-vindo à primeira aula do nosso curso de Go! Nesta aula, vamos explorar a história da linguagem Go, entendendo quem a criou, por que ela surgiu e para onde está caminhando. Go é uma linguagem moderna, criada para resolver problemas reais do desenvolvimento de software em escala.

Introdução

Go (também conhecida como Golang) é uma linguagem de programação compilada, estaticamente tipada, com sintaxe semelhante ao C, mas com recursos modernos como garbage collection, concorrência nativa e gerenciamento de dependências. Foi projetada para ser eficiente, produtiva e adequada para sistemas de grande porte.

Pessoas e cronologia (Rob Pike, Ken Thompson, Robert Griesemer, Google)

O Go foi criado por três renomados engenheiros do Google:

  • Rob Pike: conhecido por seu trabalho no Plan 9, na linguagem Limbo e no sistema de janelas Blit. Também é coautor de livros sobre programação.
  • Ken Thompson: um dos criadores do Unix e da linguagem B, predecessor do C. Recebeu o Prêmio Turing em 1983.
  • Robert Griesemer: trabalhou em sistemas de máquinas virtuais e em linguagens como Java (HotSpot) e V8.

A cronologia do Go:

  • 2007: O projeto começa como uma iniciativa interna no Google para criar uma nova linguagem que atendesse às necessidades de infraestrutura da empresa.
  • 2008: O compilador e a runtime começam a ser desenvolvidos. A linguagem ainda não tem nome oficial.
  • 2009: Em novembro, o Go é anunciado publicamente como um projeto open source. O nome "Go" é escolhido.
  • 2012: A versão 1.0 é lançada, trazendo estabilidade e compatibilidade com versões anteriores.
  • 2022: Go 1.18 introduz genéricos, um dos recursos mais solicitados pela comunidade.

Por que o Go surgiu

O Go surgiu para resolver problemas enfrentados no Google ao desenvolver sistemas de grande escala:

  • Compilação lenta: C++ demorava muito para compilar projetos enormes. Go foi projetado para compilar rapidamente.
  • Dependências complexas: O gerenciamento de dependências em C++ era complicado. Go introduziu um sistema simples de módulos.
  • Concorrência difícil: A programação concorrente em C++ era propensa a erros. Go oferece goroutines e canais para concorrência segura e eficiente.
  • Falta de produtividade: Recursos como inferência de tipos, garbage collection e ferramentas integradas (fmt, gofmt) aumentam a produtividade.

Exemplo de código em Go que demonstra concorrência com goroutines:

package main

import (
    "fmt"
    "time"
)

func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
    go say("world")
    say("hello")
}

Neste exemplo, a palavra "world" é impressa concorrentemente com "hello".

Futuro da linguagem

Go continua evoluindo com foco em simplicidade, desempenho e escalabilidade. As versões recentes trouxeram:

  • Genéricos (1.18): permitem escrever funções e tipos que funcionam com qualquer tipo.
  • Melhorias no gerenciamento de dependências (módulos).
  • Suporte a WebAssembly.
  • Ferramentas de análise estática como o vet e o gofmt.

A comunidade Go é ativa e a linguagem é usada em grandes projetos como Docker, Kubernetes, Terraform e o próprio site do Google. O futuro reserva mais otimizações, suporte a novos paradigmas e expansão do ecossistema.

Referências

Exercícios

  1. Quem são os três criadores do Go?

    Rob Pike, Ken Thompson e Robert Griesemer.
  2. Em que ano o Go foi anunciado publicamente?

    2009.
  3. Cite duas razões pelas quais o Go foi criado.

    Compilação lenta de C++ e dificuldade de gerenciar dependências.
  4. Qual é o recurso de concorrência nativa do Go?

    Goroutines e canais.
  5. Em qual versão do Go foram introduzidos os genéricos?

    Go 1.18 (lançada em 2022).