Golang um mês depois

Como foi o meu primeiro mês aprendendo Go

Eduardo Pereira
Floripa Gophers
5 min readOct 10, 2015

--

Talvez faça até mais de um mês que estou estudando Go http://www.golangbr.org/, no entanto isso não vem ao caso, o importante é que quero compartilhar um pouco do que aconteceu nesse período. Começando pelo fato que já fazia algum tempo que eu não estudava uma linguagem nova (de fato Go é nova mesmo, foi liberada para o público em Março de 2012, época que eu estava "mergulhado" em Python e depois em Node.JS).

Caminhos

A maneira como Go cria seu próprio ambiente

Em Python costumamos usar o virtualenv para criar um ambiente de pacotes que não se misture com o ambiente global, em Node.JS o NPM torna a vida mais fácil ainda para criar um ambiente de dependências no próprio diretório do projeto. Go tem uma abordagem que no começo achei estranha, mas depois que me acostumei ficou tranquila e então já fazia sentido.

A idéia é criar algo como um root directory para o ambiente, que irá conter as dependências e sources para qualquer projeto neste caminho, além de conter os binários compilados em Go.

Para isso é necessário configurar duas variáveis de ambiente GOPATH que é o caminho principal para projetos Go, não somente seus projetos, mas na realidade qualquer projeto que você baixar usando o comando go get vai parar neste caminho. O segundo caminho necessário é o $GOPATH/bin que pode ser adicionado em seu PATH principal.

Depois de um tempo terá algo como:

Para mais informações http://www.golangbr.org/doc/instalacao

Onde estão meus fontes e binários em Go ?

Packages, repositórios e binários tudo esta "conectado"

O próximo detalhe que fiquei surpreso foi o sistema de packages, que diz respeito como você organiza seus projetos e como utiliza projetos e binários de terceiros.

Anteriormente falei que existe um caminho para os sources ? Então percebi que até o caminho do meu repositório do Github estava relacionado ao caminho do código como um package local. Perceba que o caminho “src/github.com/eduardonunesp” é o caminho do user no Github e do projeto por exemplo: “src/github.com/eduardonunesp/usd2brlgo” é o caminho onde vai estar o projeto em Go quando baixar esse projeto utilizando o comando “go get github.com/eduardonunesp/usd2brlgo” (que propaganda né ?). Automaticamente será criado no GOPATH o diretório src e o diretório bin, ou seja, o código e binário prontos para serem usados !

Até mesmo quando você esta “codando” em Go vai precisar se referir aos projetos de terceiros como o caminho completo por exemplo:

Obs.: Não deixe de usar algo para gerenciar as suas dependências, infelizmente Go não é bom nisso, quando se trata de marcar a versão de uma dependência, aconselho usar o godep https://github.com/tools/godep

Tem erro ? não, agora tem erro ? agora tem ? não ? então segue

Go não quer que você erre ou esqueça de algo, te enche a paciência até você aprender.

Extremamente “reclamão” esse compilador, o metalinter então nem se fala, Go proteje você de você mesmo o tempo todo. Chato sim, mas é seu amigo e esta sempre avisando que existem variáveis não utilizadas, funções sem retorno, imports inúteis e até mesmo quando deadlocks mataram seu pobre programa.

Como as funções de Go podem retornar mais de duas variáveis, é muito comum e por padrão retornar um tipo error e um resultado, então você viverá fazendo checagens de erro uma atrás da outra aos montes. Na verdade Go tem até um tipo exception com o nome de panic, mas não é recomendado que se use demais (não sei direito onde usar, talvez quando uma "nháca" do mal acontece).

O padrão de formatação do código é levado tão a sério que tem um programa para formatar seu código (já vem junto no pacote e se chama go format). Só para deixar claro: o metalinter é uma coleção de várias checagens estáticas. Quando passo no meu código da até tristeza, só falta reclamar que o código tá muito grande, ou que meu teclado esta sujo, piadas a parte, quando se segue a risca esse linter, o código fica padrão Go Master.

Editor

Aquele “programinha” que usamos para ganhar a vida e transformar café em código

Uso o Sublime Text já faz algum tempo, também gosto do vim (usei como editor principal por muito tempo), uso ambos, mas 90% do tempo estou usando Sublime.

O compilador pode até se recusar a compilar seu amado código por causa de uma variável não utilizada, mas não vai incomodar por usar o bloco de notas, pode usar qualquer editor a vontade.

O plugin que recomendo é o GoSublime, altamente configurável e cheio de combinações legais, por exemplo: Configurei para quando salvar meu código, já formatar, remover imports não utilizados e executar o linter.

Tem gente que usa o Atom, que também tem um bom suporte, no entanto eu não me acostumei.

Pilhas inclusas

Bem mais do que pilhas, digamos uma usina nuclear

Uma alegria ver uma standard library tão rica, tem package pra tudo, criptografia, compressão, Encode/Decode, HTML, Hash, TCP, HTTP, RPC, IO, Buffers e mais um monte de coisa.

Tem tanta package pronta e de qualidade, que é praticamente um insulto quando se propõem algo que já existe (na inocência, já fiz isso, ao invés de pesquisar fui propor algo que já existia, o povo ficou irritado).

Detalhes

Jogo rápido, para finalizar

  • A compilação é ultra rápida, na verdade é tão rápida que parece que a linguagem é interpretada, sem brincadeira.
  • Gin é o melhor framework web até agora https://github.com/gin-gonic/gin).
  • Já tem packages voltadas para teste unitário e o comando é go test.
  • Aprenda bem os conceitos de Channel e Routines ou vai sofrer com Deadlocks.
  • Não deixe de se inscrever no Gophers Slack (http://bit.ly/go-slack-signup)
  • Veja também o artigo Go na prática, onde temos um projeto bem legal.

--

--

Eduardo Pereira
Floripa Gophers

Software development for over a decade, I enjoy working with talented people who also love solving problems and find intelligent solutions