Go: Introdução ao Go e instalação

Go é uma linguagem concorrente compilada desenvolvida pelo Google — ela resolve problemas de engenharia com uma sintaxe mínima, tornando “rápido e simples” uma realidade.

Este tutorial foi elaborado para iniciantes sem experiência prévia. Ele começa com o básico — “O que é Go?” — e orienta você durante todo o processo até a criação e execução de sua primeira ferramenta de linha de comando em Go. O Go é o padrão de fato em ambientes nativos da nuvem (Docker/Kubernetes), microsserviços e ferramentas de linha de comando, e é utilizado por mais de 3 milhões de desenvolvedores em todo o mundo.

1. O que você vai aprender


2. A história real de um engenheiro de backend

(1) Problema: A API do Python trava sob carga simultânea

Alice é engenheira de backend, e o serviço de API que ela desenvolveu em Python vem apresentando problemas recentemente:

“Durante o evento online, recebemos 10.000 solicitações simultâneas, o que fez com que os tempos de resposta da API disparassem de 100 ms para 8 segundos e que o uso da CPU chegasse a 95%. O serviço quase travou.”

Depois de analisar os logs do backend, ela descobriu que:

Seu chefe perguntou a ela: “Podemos mudar para uma linguagem de programação diferente?” Depois de pesquisar um pouco, Alice decidiu optar pelo Go.

(2) A Solução do Go

Veja como Alice reescreveu a mesma lógica de negócios em Go:

GO
// main.go
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello from Go!")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

Comparação de desempenho (10.000 usuários simultâneos para o mesmo cenário de negócios):

Dimensão Python Flask Go net/http
Tempo médio de resposta 2.500 ms 45 ms
Uso de memória 500 GB 1,2 GB
Utilização da CPU Um núcleo 95% Vários núcleos 70%
Tempo de inicialização 5 s 20 ms
Método de implantação Requer ambiente de execução do Python Binário único

(3) Benefícios: Por que vale a pena aprender Go?

Depois de concluir esta lição, você dará seu primeiro passo:


3. O que é o Go?

Go (também conhecido como Golang) é uma linguagem de código aberto e compilada criada em 2009 e projetada por Robert Griesemer, Rob Pike e Ken Thompson, do Google. Todos os três são colaboradores principais da linguagem C e do Unix.

(1) A motivação por trás da criação do Go

Em 2007, o Google enfrentou um problema interno:

O objetivo do Go: resolver problemas de engenharia com uma sintaxe mínima, tornando a colaboração entre equipes grandes tão tranquila quanto em equipes pequenas.

(2) As três principais filosofias de design do Go

100%
graph TB
    A[Go Design Philosophy] --> B[Simplicity]
    A --> C[Concurrency]
    A --> D[Speed]

    B --> B1[25 keywords<br/>No inheritance/No issues]
    B --> B2[gofmt standard format<br/>No style debates in team code]

    C --> C1[goroutine<br/>2KB stack, start 1μs]
    C --> C2[channel<br/>CSP concurrency model]

    D --> D1[Compiled<br/>Compilation in seconds, 20ms start]
    D --> D2[Static link<br/>Single binary deployment]

(3) Áreas típicas de aplicação do Go

Área Projetos de destaque Por que escolher a Go
Nativo da nuvem Docker, Kubernetes, Istio Binário único, compilação multiplataforma, baixo consumo de memória
Microsserviços Uber, Twitch, Dropbox Alta simultaneidade, HTTP integrado, biblioteca padrão abrangente
Ferramentas CLI gh (GitHub CLI), hugo, cobra Compilação rápida, multiplataforma, distribuição em um único arquivo
Bancos de dados TiDB, CockroachDB, InfluxDB Alto desempenho, coleta de lixo bem otimizada
DevOps Terraform, Prometheus, Consul Processamento simultâneo de milhões de métricas
💡 Dica: Se você já ouviu falar do Docker ou do Kubernetes, saiba que o código principal deles é escrito em Go. O Go é a “linguagem nativa” da era cloud-native.


4. Diferenças entre o Go e outras linguagens

(1) Noções básicas sobre localização de idiomas

100%
graph TB
    subgraph L[Division of Labor Among Programming Languages]
        direction TB
        G[Go<br/>Back-end Services/Cloud-native/CLI]
        P[Python<br/>Data Science/AI/Script]
        J[Java<br/>Enterprise-level/Android/Big Data]
        C[C++<br/>Games/System Software/Embedded]
        R[Rust<br/>System-level/Embedded/Security-sensitive]
    end

(2) Go x Python x Java x C++

Dimensão Go Python Java C++
Sistema de tipos Estático, fortemente tipado Dinâmico, fortemente tipado Estático, fortemente tipado Estático, fortemente tipado
Compilação Compilado (segundos) Interpretado Compilado (mais lento) Compilado (muito lento)
Modelo de concorrência goroutine (leve) thread (limitado pelo GIL) thread thread
Uso de memória Baixo (1–2 MB) Alto (50–200 MB) Alto (100–500 MB) Médio (10–50 MB)
Curva de aprendizado Suave Mais fácil Íngreme Muito íngreme
Implantação Binário único Requer ambiente de execução Requer JRE Requer saída compilada
Cenários típicos Back-end/Nativo da nuvem Ciência de dados/IA Aplicativos corporativos Software de sistema

(3) Você também deve estar ciente das “fraquezas” do Go

⚠️ Observação: Go não é uma linguagem que sirva para tudo. Use JavaScript para desenvolvimento front-end na web, Python para análise de dados e Kotlin ou Swift para desenvolvimento móvel. Go se concentra em aplicações do lado do servidor, de linha de comando (CLI) e nativas da nuvem.


5. Instalar o Go

Link oficial para download: https://go.dev/dl/

Plataforma Instalador Tamanho
Windows go1.22.x.windows-amd64.msi ~150 MB
macOS (Intel) go1.22.x.darwin-amd64.pkg ~150 MB
macOS (Apple Silicon) go1.22.x.darwin-arm64.pkg ~150 MB
Linux x86_64 go1.22.x.linux-amd64.tar.gz ~70 MB
Linux ARM64 go1.22.x.linux-arm64.tar.gz ~70 MB

(2) ▶ Exemplo: Instalação gráfica do Go no Windows

BASH
# Steps 1: Double-click go1.22.x.windows-amd64.msi
# Steps 2: All the Way Next (Installed by default to C:\Program Files\Go)
# Steps 3: Check the box "Add Go to PATH" (Automatically Configure Environment Variables)
# Steps 4: Finish
# Steps 5: Verify Installation
go version

Saída:

TEXT 📖 Somente leitura
go version go1.22.x windows/amd64

(3) ▶ Exemplo: Instalando o Homebrew no macOS

BASH
# Steps 1: Install Homebrew (If you haven't installed it yet)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Steps 2: Installation Go
brew install go

# Steps 3: Verification
go version

Saída:

TEXT 📖 Somente leitura
go version go1.22.x darwin/arm64

(4) ▶ Exemplo: Extração e instalação manuais no Linux

BASH
# Steps 1: Download (Using 1.22.x as an example)
wget https://go.dev/dl/go1.22.x.linux-amd64.tar.gz

# Steps 2: Extract to /usr/local
sudo tar -C /usr/local -xzf go1.22.x.linux-amd64.tar.gz

# Steps 3: Configure PATH (Write to ~/.bashrc or ~/.zshrc)
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc

# Steps 4: Verification
go version

Saída:

TEXT 📖 Somente leitura
go version go1.22.x linux/amd64

(5) Verificar as variáveis de ambiente

Variável Significado Valor padrão
GOROOT Ir para o diretório de instalação /usr/local/go (Linux) / C:\Program Files\Go (Win)
GOPATH Diretório da área de trabalho ~/go
PATH Caminho do arquivo executável Deve incluir $GOROOT/bin

6. O primeiro programa “Hello World”

(1) Criar um diretório de trabalho

BASH
mkdir hello-go
cd hello-go

(2) Escreva o arquivo main.go

BASH
# At hello-go, create a file in the directory
cat > main.go << 'EOF'
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
    fmt.Println("Welcome to Go programming!")
}
EOF

(3) ▶ Exemplo: go run Executar diretamente (durante o desenvolvimento)

BASH
go run main.go

Saída:

TEXT 📖 Somente leitura
Hello, World!
Welcome to Go programming!

go run irá compilar e executar, mas não salva o arquivo binário; é adequado para desenvolvimento e depuração.

(4) ▶ Exemplo: go build Compilar para binário (implantação em produção)

BASH
go build -o hello main.go

# Run the generated binary
./hello    # Linux/macOS
hello.exe  # Windows

go build Gera um único arquivo executável que pode ser copiado diretamente para qualquer servidor com a mesma arquitetura e executado sem instalar o runtime do Go.

(5) ▶ Exemplo: gofmt Formatação automática de código

BASH
# Format all .go files in the current directory
gofmt -w .

# Check that the format is correct (do not modify)
gofmt -l .

gofmt é a “polícia do estilo de código” da equipe Go — todo código Go deve passar pela verificação gofmt, sem margem para discussões sobre estilo.


7. go mod init: Preparando o terreno para o gerenciamento de dependências

O gerenciamento abrangente de dependências é abordado em profundidade na Lição 8: pacotes de erros. Aqui, vamos estabelecer as bases para que você entenda o que é um arquivo go.mod.

(1) Por que a gestão de dependências é necessária?

Suponha que seu projeto utilize uma biblioteca de terceiros. Como você a declara? Como você a atualiza? Como você garante que todos os membros da equipe estejam usando a mesma versão?

Resposta do Go: arquivo go.mod + comando go mod.

(2) ▶ Exemplo: go mod init Criar um projeto

BASH
# Run the following command in the project's root directory
cd hello-go
go mod init hello-go

Saída:

TEXT 📖 Somente leitura
go: creating new go.mod: module hello-go
go: now you can use 'go get' to add dependencies

Arquivo go.mod gerado:

TEXT 📖 Somente leitura
module hello-go

go 1.22

(3) O que essas duas linhas de código significam

Campo Significado
module hello-go Nome do módulo (recomendamos usar o nome de domínio do projeto na ordem inversa; este tutorial usa o nome do projeto)
go 1.22 Versão mínima exigida do Go
💡 Dica: Na Lição 8, você aprenderá comandos avançados, como go get, go mod tidy e go.sum, para integrar bibliotecas de terceiros (como gin e gorm) ao seu projeto.


8. Exemplo completo: sua primeira ferramenta de linha de comando em Go

Vamos reunir todo o conhecimento adquirido acima para criar uma ferramenta CLI simples chamada Cartão de Informações Pessoais.

BASH
# Steps 1: Create a project directory
mkdir my-card && cd my-card

# Steps 2: Initialize module
go mod init my-card

# Steps 3: Write code
cat > main.go << 'EOF'
package main

import "fmt"

func main() {
    // Define a variable
    name := "Alice"
    role := "Backend Engineer"
    yearsOfExperience := 5

    // Print Card
    fmt.Println("========================================")
    fmt.Println("         Personal Card CLI")
    fmt.Println("========================================")
    fmt.Printf("Name:               %s\n", name)
    fmt.Printf("Role:               %s\n", role)
    fmt.Printf("Years of Experience: %d\n", yearsOfExperience)
    fmt.Printf("Language:           Go %s\n", "1.22+")
    fmt.Println("========================================")
}
EOF

# Steps 4: Run
go run main.go

# Steps 5: Compile into an executable file
go build -o card main.go
./card

Resultado esperado:

TEXT 📖 Somente leitura
========================================
         Personal Card CLI
========================================
Name:               Alice
Role:               Backend Engineer
Years of Experience: 5
Language:           Go 1.22+
========================================
🔥 Erro comum: Não escreva package main como package Main (o Go diferencia maiúsculas de minúsculas). func main() é o ponto de entrada do programa e não pode ser renomeado.


❓ Perguntas Frequentes

P: Qual é a relação entre Go e Golang? R: O nome oficial do Go é “Go”, mas como “Go” é muito genérico e dificulta a busca por informações, a comunidade geralmente usa “Golang” como um apelido (o domínio golang.org também usa esse nome). Os dois termos são totalmente intercambiáveis; use o que preferir.

P: Para que o Go é mais adequado? R: Os pontos fortes do Go estão no desenvolvimento do lado do servidor: APIs/microsserviços, ferramentas de linha de comando (CLI), aplicativos nativos da nuvem (tanto o Docker quanto o K8s são escritos em Go), bancos de dados e filas de mensagens. O Go não é adequado para interfaces gráficas de usuário (GUIs) de desktop, aplicativos móveis, desenvolvimento front-end ou motores de jogos (outras linguagens são mais adequadas para essas áreas).

P: Qual é a diferença de desempenho entre Go e Python? R: Para tarefas que exigem muito da CPU, o Go costuma ser de 30 a 100 vezes mais rápido que o Python; para tarefas que exigem muito de E/S, ele pode ser de 10 a 50 vezes mais rápido quando se utilizam goroutines. A diferença decorre dos seguintes fatores: compilação versus interpretação, goroutines versus o GIL e otimizações decorrentes da tipagem forte.

P: O que devo fazer se o go version exibir a mensagem “comando não encontrado” após a instalação? R: Isso geralmente ocorre porque o PATH não está configurado. No Windows, reinicie o terminal ou faça logout e login novamente; no Linux/macOS, execute source ~/.bashrc (ou ~/.zshrc). Se isso ainda não funcionar, verifique se $GOROOT/bin está incluído em $PATH: echo $PATH | grep go.

P: Existem diferenças significativas entre o Go 1.22 e as versões anteriores? R: O Go 1.22 traz três mudanças importantes: (1) aprimoramentos no roteamento HTTP mux.HandleFunc("GET /path/{id}", h); (2) loops for-range para inteiros for i := range 10; (3) otimizações no modelo de memória. Este tutorial se baseia no Go 1.22 ou versões posteriores.

P: Preciso aprender C antes de aprender Go? R: Não. Um dos objetivos de design do Go é ser “mais simples que o C++”. Desde que você tenha um conhecimento básico de qualquer linguagem de programação (Python, Java ou JavaScript servem), pode começar a aprender Go imediatamente. O Go tem apenas 25 palavras-chave, menos do que a maioria das linguagens.

P: Qual é a diferença entre go run e go build? R: go run = Compilar + Executar + Limpar arquivos intermediários (para desenvolvimento); go build = Apenas compilar, gerar um arquivo executável (para implantação em produção). go run não mantém o arquivo .exe, enquanto go build o mantém.


📖 Resumo


📝 Exercícios

  1. Exercício básico (Dificuldade ⭐): Instale o Go 1.22 ou uma versão posterior localmente, execute go version e faça uma captura de tela para verificar; escreva hello.go para exibir “Hello, Go!”.

  2. Problema avançado (Dificuldade ⭐⭐): Amplie a CLI do Cartão Pessoal apresentada acima adicionando duas variáveis, city := "Shanghai" e hobby := "Coding", e acrescentando essas duas linhas ao final do cartão. Por fim, compile-o em um arquivo executável usando go build.

  3. Desafio (Dificuldade: ⭐⭐⭐): Pesquise uma ferramenta de linha de comando que você use com frequência (como git / docker / kubectl) para verificar se ela foi escrita em Go. Se for o caso, escreva um texto de 200 caracteres explicando “por que o Go é adequado para ferramentas de linha de comando” (dica: compilação multiplataforma, binário único, inicialização rápida).

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%