Preparando o ambiente
Vamos instalar o Go. Com ele, vamos conseguir compilar, executar, testar, formatar e organizar projetos.
Instalando o Go via código fonte
O jeito mais seguro é instalar pelo site oficial do Go. Podemos fazer a instalação via Windows, macOS e Linux. No Windows, podemos baixar o instalador .msi, abrir o arquivo e seguir os passos. Depois disso, o instalador configura o Go para ser encontrado pelo terminal.
No macOS, podemos usar o pacote .pkg, abrir e seguir a instalação. O Go costuma ser instalado em uma pasta do sistema e o comando go passa a ficar disponível no terminal. Já no Linux, existe a opção de usar o pacote oficial .tar.gz.
No Linux, existem duas formas principais de instalar Go a partir do site oficial. Uma usa o binário pré-compilado, que já vem pronto para usar, e a outra usa o código-fonte, que precisa ser compilado antes de virar o comando go.
O arquivo com binário pré-compilado costuma ter um nome parecido com: go1.x.x.linux-amd64.tar.gz. Já o arquivo com código-fonte costuma ter um nome parecido com: go1.x.x.src.tar.gz.
Use o site oficial para fazer a instalação na sua distribuição.
Vou desmontrar como fazer no Ubuntu 22.04, usando o binário pré-compilado:
# Baixe o código fonte:
$ wget https://go.dev/dl/go1.26.4.linux-amd64.tar.gz
# Descompacte o código fonte colocando ele em '/usr/local':
$ tar -C /usr/local -xzf go1.26.4.linux-amd64.tar.gz
# Adicione '/usr/local/go/bin' ao PATH de forma temporária:
$ export PATH=$PATH:/usr/local/go/bin
# Adicione '/usr/local/go/bin' ao PATH de forma definitiva:
$ echo "PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
# Veja a versão e se deu certo:
$ go version
go version go1.26.4 linux/amd64
Além desses métodos, podemos fazer a instalação via apt e snap. Em distribuições baseadas em Debian, podemos instalar Go pelo gerenciador de pacotes:
sudo apt update
sudo apt install golang-go
Esse método instala Go usando os pacotes da distribuição Linux. Ele é mais integrado ao sistema e costuma ser fácil de remover ou atualizar pelo próprio apt.
A diferença é que a versão disponível no repositório oficial da distro pode ser mais antiga em comparação com a versão disponível no site oficial. O ponto chave para manter em mente é que, esse pacote vem do ecossistema da distribuição, não sendo construído pelo projeto Go oficial. Como exemplo, a wiki oficial do Go para Ubuntu diz que esses pacotes não foram criados pelo projeto oficial do Go e não são suportados por ele, embora possam ser úteis.
Entendendo GOROOT de forma básica
O GOROOT é o local onde o próprio Go foi instalado, é ali que ficam partes da instalação da linguagem, como ferramentas internas, bibliotecas padrão e arquivos usados pelo Go.
Para ver esse caminho, rode:
$ go env GOROOT
/usr/local/go
Não é comum mexer manualmente no GOROOT, ele serve mais para entender onde a instalação do Go está.
Entendendo GOPATH de forma básica
Já o GOPATH é uma ideia mais antiga do Go, antes dos módulos, muitos projetos Go dependiam bastante dele para organizar código. Hoje em dia, com Go Modules, o GOPATH não é mais o centro da organização de projetos.
Mesmo assim, GOPATH ainda existe, ele costuma ser usado como área padrão para algumas coisas, como binários instalados com go install. Para ver o valor atual:
go env GOPATH
$HOME/go
Esse é o valor padrão quando GOPATH não for definido manualmente.
Entendendo Go Modules de forma básica
Já que citei Go Modules, vamos falar um pouco sobre ele. O Go Modules é o sistema que o Go usa para organizar projetos e controlar dependências. Uma dependência é um código externo usado pelo projeto, como uma biblioteca para trabalhar com banco de dados, criar API, ler arquivo .env ou fazer logs.
Antes dos módulos, o Go dependia do GOPATH, que obrigava uma organização mais específica das pastas. Hoje, o normal é criar um projeto em qualquer pasta e iniciar um módulo com go mod init.
Um módulo é uma unidade de projeto em Go. Ele pode ser uma aplicação, uma biblioteca ou um conjunto de pacotes relacionados. Um projeto pequeno pode ter só um módulo.
Por hora vamos manter a explicação assim, veremos mais sobre isso quando avançarmos na explicação sobre o Go.
Criando a primeira pasta de projeto
Agora vamos criar um diretório onde vamos deixar nossos projetos Go.
# Crie o diretório:
$ mkdir Go-Projects
# Entre no diretório:
$ cd Go-Projects
Agora podemos criar mais um diretório, esse será de um projeto específico:
$ mkdir primeiro-contato
$ cd primeiro-contato
Até aqui, ainda não existe código Go. Só existe uma pasta organizada para começar.
Primeiro contato com o comando go
Dentro da pasta primeiro-contato, rode:
$ go env | grep -Ei 'GOOS|GOARCH'
GOARCH='amd64'
GOOS='linux'
Esse comando mostra várias configurações que o Go está usando. Não precisa entender tudo agora. Para este momento, os nomes mais úteis são:
GOOS
OGOOSrepresenta o sistema operacional de destino, comowindows,linuxoudarwin.GOARCH
OGOARCHrepresenta a arquitetura, comoamd64ouarm64.
Essas duas informações serão úteis mais tarde, quando estudarmos compilação para Windows, Linux e macOS. Também dá para consultar uma configuração específica:
go env GOOS
Isso é mais limpo do que olhar a saída inteira de go env.
Iniciando um módulo Go
Ainda não vamos escrever um programa, mas já podemos preparar o diretório como um projeto Go. Dentro de primeiro-contato, rode:
$ go mod init exemplo/primeiro-contato
go: creating new go.mod: module exemplo/primeiro-contato
Esse comando cria um arquivo chamado: go.mod. Esse arquivo identifica que aquela pasta é um módulo Go. Um módulo é um agrupamento de código que pode ter dependências e uma identidade própria.
O nome exemplo/primeiro-contato é só um nome local para estudo. Em projetos reais, é comum usar algo parecido com o caminho do repositório, por exemplo github.com/nome/projeto.
Dentro do go.mod, deve aparecer algo parecido com:
module exemplo/primeiro-contato
go 1.26.4
A linha module mostra o nome do módulo, já a linha go mostra a versão da linguagem usada como referência pelo projeto.