Postagens

Mostrando postagens de julho, 2020

Postagem em destaque

Assinando arquivos PDF com certificado digital em Go

Imagem
Desenvolver uma solução para assinar PDFs com certificado digital (PFX) em Go se mostrou um desafio considerável, apesar do escopo inicial parecer simples. Após a conclusão, a implementação aparenta ser direta (são apenas 180 linhas), mas o processo exigiu várias iterações e entendimento detalhado sobre as limitações das ferramentas e bibliotecas disponíveis. A primeira abordagem consistiu em tentar, de forma monolítica, ler o PDF, aplicar o carimbo visual e assinar digitalmente em uma única etapa. No entanto, surgiram diversos entraves — em especial, a perda da assinatura digital após a inserção do carimbo, e erros decorrentes da manipulação do documento. Adicionalmente, muitas soluções baseadas em IA indicavam bibliotecas pagas ou APIs externas, ou ainda métodos inexistentes nas bibliotecas, tornando a busca por alternativas viáveis um processo repetitivo e pouco produtivo. O fluxo mais robusto — e funcional — consolidou-se apenas após dividir o processo em etapas claras, conforme ob...

GO: "try/catch" ou "if err != nil"

Assim que comecei a programar em GO, fiquei bastante preocupado pelo fato dele não ter try/catch. Eu já estava (mal) acostumado a usar try/catch em tudo que é lugar. E isso é um erro. Bom, não chega a ser um erro, mas descobri que usar IF de maneira inteligente, o código fica muito mais claro. Como o Rob Pike, diz: " Errors are values ". Além disso, se você tem um bloco de código grande dentro de um try, logicamente terá que tratar todos os possíveis erros dentro do catch, o que visualmente não fica tão claro. Diante disso, passei a não mais encadear um IF dentro de outro (sempre que possível, lógico), e já trato (e retorno) os erros tão logo quanto possível. Parece bobo, mas nem sempre fiz isso. E agora, me parece algo tão óbvio!