Minha experiência com Go (golang), depois de 2 anos

Ahoy!

Eu sou um daqueles primatas que se encantou com TI em 1988. De lá para cá, essa paixão só aumentou. Passei por várias experiências: Dbase, Dialog, Clipper, Delphi, C, Assembler (x86), PHP, Python, Java, Lua, entre tantas outras.
Para deixar claro, sempre tive mais prazer com C e Python do que com qualquer outra linguagem que eu já tenha utilizado (21, incluindo Go). Questão de gosto pessoal, mas isso não vai influir tanto nos motivos da minha escolha.

Em 2013, depois de 25 anos trabalhando com TI, decidi abandonar minha vidinha de CLT e seguir carreira solo, como empreendedor, num momento que eu já era full stack web (T-Shaped).

Minha primeira escolha, mais segura, foi o ambiente java (jvm): robusto, alta credibilidade e alta demanda. Testei vários blends: Spring, Groovy, Scala, Roo (Orientação a Aspectos????), enfim, acabei decidindo pelo combo Java + Playframework, que proporcionava um sistema de views extremamente inteligente (gerando erro em tempo de compilação caso alguma view recebesse parâmetro inválido em alguma chamada).

Tudo perfeito. Mas tinha aquele 1% inconformado, com o tempo de build: 1 minuto no meu MacBook Pro i7 quadcore 16 Gb RAM SSD, ou 2 minutos no meu PC. Existia a promessa de hot reload, que funcionava por 3 ou 4 vezes e parava de funcionar.

Então, num fim de semana (que eu reservava para testar coisas com arduino, raspberry ou outras coisas malucas) eu decidi experimentar Go.

Fiz o tutorial do site, a primeira impressão foi muito boa (uma espécie de C emprestando e melhorando recursos do python). Decidi migrar um sistema que eu havia feito em Scala para Go, gastei uma semana nisso, graças aos 3 segundos de compilação (que antes eu gastava 1 minuto), em plena versão 1.4 (quando o código fonte do Go ainda era em C++), uma luz vermelha piscou e eu realmente comecei a considerar a utilizar Go como minha ferramenta de trabalho.

Até então, a sintaxe e forma que Go trabalhava me agradava mais que qualquer outra experiência que já tive.

Apareceu uma oportunidade de trabalho, e eu decidi que utilizaria Go.

A primeira boa experiência, foi que o problema “de acentuação foi finalmente superado”. Thank you so much Rob Pyke. A mesma informação no código, no navegador do usuário, no banco de dados, sem tratamentos especiais.

Era um sistema bem simples, de controle de cheques pré-datados, com uma série de filtros, que eu deveria completar em 2 semanas, e acabei gastando 1 mês. Prejuízo financeiro, mas aprendi a lidar com coisas como Valor moeda na view/controller/model, Datas, Geração de Relatórios em PDF. O sistema roda redondo até hoje sem minha intervenção :)

Meu segundo sistema, foi um controle de escola e alunos. Nesse sistema, eu troquei o beego ORM (bastante verboso e com muito trabalho manual) pelo gorm, que eu utilizo até hoje (AMO!) mas ainda estou com minha mente oriçada pelo XORM, que é utilizada pelo Gogs (sistema de git, que eu utilizo no meu git pessoal).

Depois veio outro sistema com controle de processos, e, de repente, veio outra demanda, que era substituir um sistema feito em PHP/Laravel para Go. No processo tive que treinar uma equipe em Go.

Só para deixar claro: Eu não entendo de Laravel, e na apresentação que fiz para o cliente, ele ficou encantado pelo meu frontend, e pelos tempos de resposta. Uma tela que demorava 12 segundos para carregar no PHP/Laravel, passou a carregar em 100ms na primeira apresentação. Méritos do Go? Em partes. Go hoje entrega resultados com benchmark top 3. Mas havia uma série de falhas de arquitetura na implementação do PHP/Laravel nesse sistema específico.

De qualquer forma, eu expliquei para o cliente o risco de se adotar uma tecnologia de ponta, em que haviam poucos profissionais disponíveis no mercado. Ele pediu que eu treinasse uma equipe, que eu aceitei, e foi muito gratificante.

Para finalizar, ignorem meu gosto pessoal, mas imaginem, em que cenário eu poderia entregar isso:

Monitorar atividades de usuários numa base de mais de 4000 usuários, custando 40ms de processamento na renderização da view, num servidor bastante modesto?

Eu recomendaria Go? Lógico, eu amo Go, a 2 anos que não utilizo nada diferente, estou mudando o T-Shaped para I-Shaped, pelo menos no quesito linguagem de programação :P

Para os iniciantes e recém-formados, não é uma linguagem que vai te ajudar a buscar emprego até o momento. Mas em seu tempo livre, vai lá, desafie-se, aprenda coisas novas.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.