Go na Studio Sol

Romano Augusto
Studio Sol
Published in
5 min readAug 10, 2016

Por Victor e Romano Augusto

Na Studio Sol, sempre deixamos a escolha de ferramentas e tecnologias aberta para discussão, pois acreditamos que testar novas tecnologias aumenta o conhecimento e engajamento de todos e, principalmente, traz ganhos enormes aos produtos.

A principal linguagem de backend por aqui sempre foi PHP, e por que trocar uma linguagem consolidada, com uma grande variedade de libs estáveis e muita mão de obra disponível, por outra mais recente, com uma comunidade muito menor, e ainda se deparar com uma curva de aprendizado?

Com o passar dos anos, o time de desenvolvimento cresceu e, dada a fragilidade do código legado que tínhamos, junto às novas features, muitos bugs também começaram a surgir, comprometendo bastante a produtividade da equipe.

Uma linguagem de script te oferece alguma agilidade inicial; porém, com uma equipe grande produzindo bastante código o tempo inteiro, partes isoladas do software podem quebrar a todo momento se não tiver uma cobertura de testes confiável.

Outra desvantagem desse tipo de linguagem é que os potenciais problemas só são vistos em tempo de execução e, muitas vezes, somente em produção.

Sentimos que algo deveria ser feito, então senta que lá vem história.

Começou lá em outubro de 2012, quando alguém sugeriu fazer um Dojo para testarmos Go, uma linguagem open source que na época tinha 5 anos de idade, com o Google por trás de seu desenvolvimento.

Apesar de chegarmos ao Dojo com conhecimento zero sobre a linguagem, conseguimos nos virar bem e o processo foi bem simples e divertido. Desde então, colocamos a linguagem em nosso radar.

Em março de 2014, precisávamos portar uma rotina em Python que ia no banco de dados e populava uma máquina de busca, devido a problemas de encoding e a um extenso tempo de execução.

Decidimos usar Go! Poderíamos fazer as consultas no banco e populá-la concorrentemente, reduzindo o tempo de execução.

Resultado: usamos todos os recursos de concorrência e o backend em Java não aguentou receber tamanha quantidade de requisições concorrentes e, como àquela altura não tínhamos profundos conhecimentos em como cadenciá-la, optamos por reescrever em PHP sem concorrência. :’(

Ainda assim ficamos impressionados com Go, e, no mês seguinte, em abril de 2014, surgiu mais uma oportunidade de experimentá-la em produção. Tínhamos uma rotina que criava sitemaps escrita em PHP, e demorava em média uma hora para finalizar.

Como basicamente ela lidava com banco de dados, xml e file system, poderíamos realizar essas tarefas em concorrência. Decidimos reescrevê-la em Go. Bum! Diminuímos o tempo de execução para 30 segundos. Fantástico!

A partir daí começamos a discutir as vantagens e desvantagens de diversas linguagens e Go continuou sendo nossa preferida. Tínhamos também a opção de reescrever os projetos em PHP em uma estrutura mais moderna, mas, por fim, optamos por Go e lançamos o Ouvir Música em dezembro de 2014, o Letras.mus.br em junho de 2015 e o Cifra Club ID em abril de 2016.

E por que Go, afinal de contas?

Tipagem estática

Para codebases e times grandes, cai como uma luva. Com o compilador ao seu lado, você vê em tempo de build em que parte a sua alteração eventualmente quebrou. Isso resulta na diminuição de testes unitários em muitos casos e ajudou a diminuir muitos e muitos bugs.

Simplicidade

Pequena, fácil de programar, possui uma ótima biblioteca padrão, não tem classes, nem herança, favorecendo a composição através de interfaces.

Concorrência built-in

Muito fácil de usar e os channels são lindos! Muitas de nossas tarefas são compostas, porém independentes. Logo, não há necessidade de ficarem bloqueadas. =)

Velocidade de compilação

Para um desenvolvedor web, o feedback rápido é extremamente importante para a sua produtividade e Go compila tudo em segundos, não em minutos. xD

Performance

Obtivemos responses muito mais rápidos utilizando consideravelmente menos processamento e memória. Nesse ponto, não há nem comparação. =)

gofmt

Abolimos as regras de estilo de código (e as “brigas”). =)

Go é escrito em Go!

Facilita a todos saberem tudo o que acontece por trás da biblioteca padrão, além de servir como guia de boas práticas e como deixar o código mais idiomático.

Open Source

Código aberto e comunidade ativa são essenciais para o desenvolvimento da linguagem, principalmente em termos de segurança.

Google

Os membros do core team são funcionários do Google. São grandes nomes trabalhando full time na tecnologia, garantindo qualidade e desenvolvimento constante.

Mas nem tudo são flores! Go também tem e teve seus pontos negativos na nossa transição:

Falta de exemplos de projetos WEB

Go é bastante usado para tarefas de Devops. Na época não pudemos nos basear em nada, tivemos que bolar questões estruturais do zero e até ficar redondo levou um tempinho.

Imaturidade de libs

Tivemos problemas com algumas dependências no começo, e até contribuimos com os projetos para solucioná-los, mas a biblioteca padrão foi suficiente na maioria dos casos.

Não tem generics, nem macros :(

Gerou uma leve duplicação de código em alguns pontos, mas nada que dificulte a manutenção. Sabemos que não ter generics impacta na velocidade de compilação, que adoramos. Mas um sistema básico de macros cairia bem, hein!? ;)

Paradigm shift

No começo foi difícil o “shift tab” dos programadores, acostumados com PHP, para programar com outros paradigmas e estilos de programação (concorrência, tipagem forte, etc), como, por exemplo, as diferenças entre os runtimes do PHP (per request) vs GO (long running).

Mesmo assim adoramos Go, os ganhos são imensos e, cada vez mais, mais membros do nosso time vêm adotando Go como linguagem principal de seus backends.

Go, Go, Go!!

Leia outros casos de sucesso com Go.

--

--