Olá, mundo em Go
Nesta aula, você aprenderá a criar seu primeiro programa em Go, entendendo a estrutura básica de um programa, as funções package main e func main, como executar o código com go run e compilar com go build, e como formatar o código automaticamente com gofmt.
Bem-vindo à sua primeira aula prática de Go! Vamos escrever o clássico programa "Olá, mundo" e, ao fazê-lo, explorar os elementos fundamentais que compõem um programa em Go. Esta aula vai estabelecer a base para todo o seu aprendizado futuro, então preste atenção aos detalhes.
Go é uma linguagem compilada e estaticamente tipada, projetada para ser simples, eficiente e produtiva. Antes de mergulharmos no código, é importante entender como um programa Go é organizado e quais ferramentas estão disponíveis para nos ajudar no desenvolvimento.
Estrutura de um programa
Um programa Go é composto por pacotes (packages). Cada arquivo Go começa com uma declaração de pacote, que define a qual pacote aquele arquivo pertence. O pacote é a unidade básica de organização e reutilização de código em Go. Além disso, um programa Go precisa de uma função de entrada, que é a função main no pacote main.
Vamos ver um exemplo mínimo:
package main
import "fmt"
func main() {
fmt.Println("Olá, mundo!")
}Esse código define um pacote main, importa o pacote fmt (que fornece funções de formatação de E/S), e declara a função main, que imprime uma mensagem. Note que as chaves {} delimitam blocos de código, e a indentação é feita com tabulações (ou espaços, mas a convenção é usar tab).
package main e func main
O pacote main é especial em Go: ele define um programa executável. Todo programa Go que gera um executável deve ter um pacote chamado main e uma função main sem parâmetros e sem retorno. Essa função é o ponto de entrada do programa.
Se você criar um pacote com outro nome, como package helper, ele será um pacote de biblioteca, não um executável. A função main só pode existir no pacote main. Experimente alterar o nome do pacote no exemplo acima para package foo e tente executar com go run; você receberá um erro como "package foo is not a main package".
go run e go build
Go fornece duas ferramentas principais para executar e compilar programas: go run e go build.
go run compila e executa seu programa em um único passo. É útil durante o desenvolvimento, pois é rápido e não gera um arquivo binário permanente. Por exemplo, para executar o programa acima, salve o código em um arquivo chamado main.go e execute no terminal:
go run main.goIsso imprimirá "Olá, mundo!" no terminal.
go build compila o programa e gera um executável binário (no diretório atual ou no diretório especificado). O binário terá o nome do diretório ou o nome do arquivo, dependendo da configuração. Para compilar:
go build main.goIsso criará um executável chamado main (no Linux/Mac) ou main.exe (no Windows). Depois, você pode executá-lo diretamente: ./main ou main.exe.
Uma diferença importante: go run não deixa um binário, enquanto go build gera um binário que pode ser distribuído. Para projetos maiores, go build é mais adequado para produção.
gofmt
Go é uma linguagem que preza pela consistência de formatação. A ferramenta gofmt (ou go fmt) formata automaticamente o código Go de acordo com as convenções da comunidade. Isso elimina discussões sobre estilo de código e torna todo código Go legível de forma padronizada.
Para usar, execute no terminal:
gofmt -w main.goO parâmetro -w (write) modifica o arquivo diretamente. Se você quiser apenas visualizar a formatação sem alterar, pode usar gofmt main.go que exibe o código formatado no terminal.
Muitos editores de código (VS Code, GoLand, Vim) executam gofmt automaticamente ao salvar. É uma boa prática formatar o código antes de commitar. Além disso, existe o go fmt que é um alias para gofmt -l -w (lista e formata).
Boas práticas
Sempre formate seu código com gofmt antes de compartilhar. Use nomes de arquivo com underscore (ex: hello_world.go) e siga a convenção de usar letras minúsculas para nomes de pacotes. Além disso, mantenha um único pacote main por diretório executável.
Referências
- Documentação oficial do Go
- How to Write Go Code
- Go Language Specification
- Pacote fmt
- gofmt blog post
- Effective Go
Exercícios
- Escreva um programa que imprima seu nome.
- Modifique o programa para imprimir seu nome e sua idade em linhas separadas.
- Use
go buildpara compilar o programa anterior e execute o binário gerado. - Formate o código abaixo usando
gofmt(mentalmente ou executando o comando):package main; import "fmt"; func main() { fmt.Println("Oi") } - Crie um programa que declare uma variável com seu nome e a imprima.
package main
import "fmt"
func main() {
fmt.Println("João")
}package main
import "fmt"
func main() {
fmt.Println("João")
fmt.Println(30)
}go build main.go
./main # ou main.exe no Windowspackage main
import "fmt"
func main() {
fmt.Println("Oi")
}package main
import "fmt"
func main() {
nome := "Maria"
fmt.Println(nome)
}