bom, tinha, sim, e com Python entre as linguagens suportadas. Fiz as mudanças necessárias no utilitário em Python para usar o SDK do Docker e, portanto, receber direto a saída do container do aplicativo X em vez de ler um JSON do disco. Ou seja, o utilitário passava a:
Ou seja, o utilitário precisaria rodar com o Python instalado na máquina-alvo… que era 2.7. É, Python, não será você.
E como o SDK do Docker suporta oficialmente Go, o caminho natural foi usar Go: poderia gerar um executável compilado, que não precisaria de até mesmo ter Go instalado na máquina-alvo. Lá vamos nós reescrever um utilitário de umas 500 linhas pythônicas e “gopherizá-las”.
Como eu era novato em Go, passei um tempo lendo os tutoriais da página oficial; rapidamente aprendi o básico - hora de abrir o Visual Studio Code e instalar a extensão oficial Go.
Comecei a tropeçar aqui e ali; muitas coisas foram resolvidas com buscas rápidas no Google, outras muitas coisas foram resolvidas fazendo a busca correta no StackOverflow.
Só que um terceiro conjunto de muitas coisas só foram resolvidas recorrendo à leitura do código-fonte, tanto do próprio Go como dos módulos externos que eu utilizei - um problema, em especial, me exigiu ler o código-fonte do Docker SDK umas cinco vezes até entender o que eu deveria fazer. Nem sei em que repositório está o código-fonte do Python…
(Não perguntei ao ChatGPT, e isso era uma premissa pessoal da minha reescrita.)
O código Python era estruturado em uma série de funções que recebiam um JSON, analisavam e saíam com as partes relevantes do “resumo executivo” e de uma eventual mensagem ao Teams; certamente foi um pouco de preciosismo da minha parte, então aproveitei para tornar o código mais “direto”… e se não fosse possível executar instruções antes dos laços if seria mais difícil ser direto.
Tive que tomar mais cuidado com o uso e reuso de variáveis e nomes de variáveis, especialmente fora de loops, várias vezes o Go reclamou desse hábito que eu tinha.
Achei bem mais fácil administrar módulos externos em Go do que em Python; em Python sempre acabava usando o Pipenv para gerar o requirements.txt
, enquanto em Go aprendi rapidamente a usar e gostar do go mod
.
Talvez eu tenha sido mal-acostumado pelo suporte incrível a JSON do Python, mas sofri um pouco até entender como funciona o suporte a JSON do Go.
No meu caso, sim, porque cumpriu as condições que o código precisava cumprir. Mas talvez fosse melhor escrever diretamente em Go da próxima vez…
2023-06-06