Go - Introdução

Introdução à Go, uma linguagem open source compilada com foco em produtividade e programação concorrente.

· 6 min Atualizado em

#Introdução

Go é uma linguagem de programação criada pela Google e lançada em código livre em novembro de 2009. É uma linguagem compilada e focada em produtividade e programação concorrente […]

“Go (linguagem de programação).” Wikipédia. 4 nov. 2019, 14h13min UTC.

Conheci Go em 2018. Eu estava procurando um bom substituto para Java para desenvolvimento de serviços quando eu cliquei no link que me levou para a página oficial da linguagem.

Realmente foi amor à primeira vista. Como assim eu posso escrever um servidor http funcional com menos de 20 linhas?

httpserver.go
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import (
    "fmt"
    "log"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}
Resultado httpserver.go

go run httpserver.go

Imediatamente comecei a estudar mais a fundo a linguagem e seus casos de uso. Atualmente é minha principal ferramenta de trabalho. Portanto decidi começar minhas postagens com uma breve introdução.

A ideia deste post é explicar como iniciar o aprendizado nesta linguagem, desde a instalação até a explicação de alguns conceitos simples a respeito dela. Aproveito para dar algumas dicas de como eu gosto de trabalhar, como ferramentas e recursos que utilizo.

#Instalação

A primeira coisa a se fazer obviamente é instalar os binários do Go. O pacote é composto pelo compilador e o formatador gofmt.

Baixe os arquivos necessários no site oficial de acordo com seu sistema operacional.

#Linux, macOS e FreeBSD

#Repositórios

É possível que a distribuição que você esteja utilizando (no caso do Linux e do FreeBSD) ofereça em seus repositórios oficiais versões do Go. Neste caso a instalação poderia ser feita rapidamente, como no Ubuntu:

sudo apt update
sudo apt install golang-go

Um problema aparente neste método é que estes repositórios são atualizados pelo grupo responsável pela distribuição em questão e não o time do Go. Ou seja, é possível que a versão mais recente não esteja disponível nos repositórios oficiais da sua distro.

#Instalação manual

Felizmente a instalação manual é bem simples. Primeiro, escolha o local onde deseja instalar o Go. Neste exemplo vou utilizar o local recomendado pela Google: /usr/local. Mas você pode colocar onde quiser (como na pasta de seu usuário para uma instalação sem sudo).

Após baixar o arquivo correto para seu sistema operacional, descompacte-o em seu local de escolha:

tar -C /usr/local -xzf <nome-do-arquivo>.tar.gz

Inclua /usr/local/go/bin no PATH. Um jeito fácil de fazer isso é incluir a seguinte linha ao arquivo /etc/profile (disponível para o sistema inteiro) ou $HOME/.profile para apenas seu usuário:

export PATH=$PATH:/usr/local/go/bin

#Windows

Para instalar o Go no Windows (e também para atualizá-lo quando sair uma nova versão) basta executar o instalador que você baixou no site oficial. Ele irá configurar automaticamente as variáveis de ambiente necessárias. Também é possível baixar a versão .zip com os binários e descompactar em um local de sua escolha.

#WSL

Caso você utilize WSL no Windows, você tem duas alternativas:

  • Instalar os binários utilizando o método de instalação do Linux
  • Instalar os binários no próprio Windows e chamar como “go.exe” (neste caso você também poderia criar um alias apontando para o binário para eliminar a necessidade do “.exe”)

#Testando a instalação

Após instalar o Go, certifique-se de que tudo está funcionando corretamente.

Vamos escrever um simples e já conhecido hello world:

helloworld.go
1
2
3
4
5
6
7
package main

import "fmt"

func main() {
  fmt.Println("Hello world!")
}

Agora execute seu arquivo:

go run helloworld.go

Se tudo deu certo, você verá a mensagem como resposta:

Resultado httpserver.go

go run helloworld.go

#gofmt

O Go possui sua própria ferramenta de formatação: o gofmt. Ele força um estilo de escrita que preza pela legibilidade.

Utilizar o gofmt é muito fácil, basta executar o seguinte comando:

go fmt <nome do arquivo>

Caso nenhum arquivo seja informado, ele irá formatar todos os arquivos .go no diretório onde foi executado.

Resultado go fmt

go fmt

O gofmt também consegue apontar erros no seu código. Digamos que você está vindo do mundo do JavaScript, assim como foi meu caso. Talvez você escreva algumas aspas simples no lugar das aspas duplas. Ou talvez você pule uma linha para inserir a chave após a declaração de funções… bem, o gofmt vai te avisar quanto a esses e outros erros:

Resultado go fmt

O gofmt exibe os erros que vão impedir a compilação de seu programa

#Conclusão

#IDEs e editores

Certamente o gofmt é uma das (se não a) ferramentas mais úteis durante o desenvolvimento em Go, mas talvez você esteja se perguntando se vai ter que executar este comando a cada alteração em seus fontes. Felizmente existem integrações com editores.

Meu editor favorito (IDE, na verdade) é o GoLand, da JetBrains. Ele foi desenvolvido exclusivamente para trabalhar com Go e oferece tudo o que eu poderia querer para tornar meu trabalho o mais fluído possível. Dito isso, é uma ferramenta paga e não é um preço muito em conta. É necessário renovar a licença anualmente caso você queira atualizar para as versões mais novas. Considero um ótimo investimento. Importante notar que também é possível utilizar todas as funcionalidades do GoLand na ferramenta Intellij IDEA Ultimate, também da JetBrains, bastando instalar os plugins oficiais de suporte ao Go.

Eu também utilizo o VS Code. Open source, mantido pela Microsoft, é um editor mais simples porém extremamente customizável através de plugins. Existe um plugin oficial de suporte ao Go. Ele oferece praticamente as mesmas funcionalidades que o GoLand, como debug, integração com o gofmt, testes, etc.

Eu costumo usar o GoLand como minha ferramenta de trabalho padrão para projetos com vários arquivos. Acredito que a indexação de arquivos dele e auto-complete funcionam muito melhor e são mais fluídos do que no VS Code. Porém, utilizo muito o VS Code quando quero manter um arquivo de referência ou preciso editar apenas um ou dois arquivos rapidamente (quando utilizar o vim direto no console não é tão conveniente).

#Recursos

Para finalizar, vou deixar uma pequena lista de recursos que me foram úteis durante meu aprendizado.

  • The Go Playground: um sandbox onde você pode editar, testar e compartilhar códigos Go direto no seu navegador. Uma ferramenta extremamente útil e valiosa. Possui certas limitações (você não consegue rodar um programa indefinidamente ou acessar um servidor http que foi executado por ela, por exemplo) mas para testar conceitos ou apresentar exemplos é a melhor escolha.
  • Um tour por Go: uma tradução do tour oficial em inglês, é um guia interativo passo-a-passo que ensina diversos conceitos sobre Go. Recomendo fortemente que todos os novatos na linguagem passem por ele, existe muito o que aprender.
  • Go by Example: uma coletânea de exemplos de Go. Eu sempre me encontro voltando para este site, costuma aparecer no topo das buscas relacionadas. Em inglês (embora muitos exemplos sejam auto-explicativos).
  • Stack Overflow: acho que não tem muito o que dizer aqui, acredito que a grande maioria dos desenvolvedores de hoje em dia conhecem este site. A comunidade de Go nele é extremamente ativa e uma fonte infinita de conhecimento.
  • go.dev: repositório onde se encontra a maior parte das documentações de pacotes públicos. Go é uma linguagem que preza muito pela legibilidade e facilidade de manter o código, isso implica em documentações bem escritas. Muitas vezes as respostas para suas perguntas estarão na documentação das bibliotecas que você está tentando utilizar. Crie o hábito de ler documentações e, mais importante, de documentar tudo que você fizer!

Você pode me encontrar no twitter ou no github!

© Marcelo Gomes Jr 2011-2020