Gerenciando Dependências em Golang

Jul 27, 2017 00:00 · 500 words · 3 minute read Desenvolvimento GO Ferramentas

by Elton Minetto

Gerenciando dependências em Golang

Desenvolver software atualmente se parece cada vez mais com montar um quebra-cabeça. Foi-se o tempo dos grandes frameworks, com várias funcionalidades acopladas, e é muito comum usarmos vários pequenos pacotes para montarmos nossos projetos.

A maioria das linguagens de programação modernas possui um sistema de gerenciamento destas dependências, como o Composer do PHP, o yarn/npm para JavaScript, pip no Python, etc. No ecossistema Go existem várias implementações deste conceito, o que acabou gerando um certo conflito na hora de selecionar uma solução. Para resolver isso a comunidade começou a desenvolver uma ferramenta para ser o padrão das próximas versões da linguagem.

Esta ferramenta é o dep que está em acelerado desenvolvimento. Apesar de ainda não estar pronto ele já pode ser considerado “safe for production use”, segundo o site oficial.

Neste post vou mostrar como usá-lo em um projeto já existente, o primeiro que eu desenvolvi em Go.

O primeiro passo é instalar a ferramenta, usando o comando:

go get -u github.com/golang/dep/cmd/dep

Depois basta entrar no projeto e executar o comando:

cd goCep dep init

A saída do comando foi:

Using ^1.4.0 as constraint for direct dep github.com/gorilla/mux Locking in v1.4.0 (bcd8bc7) for direct dep github.com/gorilla/mux Locking in v1.1 (1ea2538) for transitive dep github.com/gorilla/context Using master as constraint for direct dep github.com/andelf/go-curl Locking in master (f8b334d) for direct dep github.com/andelf/go-curl Using master as constraint for direct dep github.com/ryanuber/go-filecache Locking in master (52ce07f) for direct dep github.com/ryanuber/go-filecache

O que o dep fez foi analisar os meus arquivos .go procurando pelos import e ao encontrá-lo ele fez os seguintes passos:

  • criou um diretório chamado vendor

  • fez o go get de cada dependência salvando os arquivos no vendor

  • criou um arquivo chamado Gopkg.toml com as definições das dependências

  • criou um arquivo chamado Gopkg.lock com os detalhes das versões instaladas, incluindo o commit específico que está sendo usado de cada dependência

Para quem está usando o Composer do PHP vai reconhecer alguns destes passos pois o resultado é parecido com o composer.json e composer.lock.

Agora basta salvar no repositório os arquivos Gopkg.toml e Gopkg.lock. Alguns projetos defendem a ideia de salvar no repositório o diretório vendor para facilitar a compilação, mas eu não acho uma alternativa muito válida. Prefiro salvar apenas os arquivos das definições das dependências e não o código delas.

Para instalar as dependências novamente basta ter o dep instalado e executar:

dep ensure

Quando uma nova dependência for necessária no projeto basta adicionar ela no código usando o import e executar novamente o dep ensure que ela será instalada.

O dep possui mais algumas funcionalidades que podem ser vistas no site oficial, como compatibilidade com outros gerenciadores (Glide por exemplo), atualização das dependências, configurações do arquivo .toml, etc.

O plano é a ferramenta ser incluída por padrão em todas as instalações da linguagem a partir da versão 1.10, o que vai facilitar ainda mais o uso no dia a dia. Sem dúvida vai ser uma ótima adição a linguagem.

Originally published at http://eltonminetto.net/post/2017-07-28-gerenciando-dependencias-golang/ on July 28, 2017.

tweet Share