Usando Golang como linguagem de script

Dentre as decisões técnicas que fizemos durante o desenvolvimento da Codenation, uma das mais acertadas foi a escolha de Go como linguagem principal.

Graças a esta escolha, aliada a adoção da Clean Architecture, conseguimos ganhar produtividade ao usar a mesma linguagem para diversas tarefas como:

Dando uma olhada rápida no nosso repositório é possível ver o Go espalhado por todas estas finalidades:

go_codenation

No diretório cmd é possível visualizar alguns dos usos que fazemos do Go como linguagem de script. Alguns deles são executados como parte do workflow de desenvolvimento do time, como o trello-github que automatiza tarefas de integração entre estas duas ferramentas. Outros são executados como tarefas agendadas via crontab, como o load-bi. E outros são executados como parte do workflow do nosso servidor de CI/CD, como as migrations.

Entre as vantagens do Go neste cenário, em comparação com shell scripts, posso citar:

Pacotes úteis

Vou deixar aqui uma lista de pacotes que usamos para auxiliar na criação destes pequenos aplicativos:

github.com/fatih/color

Facilita a criação de mensagens coloridas, o que aumenta a usabilidade. Exemplo:

cli_go

github.com/schollz/progressbar

Na imagem acima é possível ver este pacote em funcionamento. Com ele é fácil criar barras de progresso, útil em processos que demoram para executar.

github.com/jimlawless/whereami

Este pacote é útil para gerar mensagens de erro, pois ele captura o nome do arquivo, linha, função, etc. Por exemplo:

File: whereami_example1.go  Function: main.main Line: 15

github.com/spf13/cobra

O cobra é provavelmente a biblioteca mais usada para o desenvolvimento de aplicações em linha de comando em Go. Segundo a documentação ele é usado em projetos importantes como Kubernetes, Hugo, Docker, entre outros. Com ele é possível criar aplicações profissionais, com processamento de input, opções, documentação. Usamos ele no nosso CLI, como no exemplo:

cobra

Existem outros pacotes e bibliotecas que podem auxiliar no desenvolvimento de aplicativos de linha de comando, para automatizar diversas tarefas do seu workflow de desenvolvimento e das demais equipes. No projeto Awesome Go é possível encontrar diversas opções interessantes.

Espero que estas dicas ajudem a inspirar novos usos da linguagem em seus projetos.