Executando verificação de segurança...
7

Migrando um projeto em Django para GoLang

Boa tarde pessoal, não é bem um tutorial ou um paper, e sim um pedido de idéias para quem já desenvolve usando GoLang. Temos um projeto que está em fase embrionária, com algumas telas já prontas usando Django/python... porém, gostaria de atualizar a stack para GoLang, eis que surge a dúvida:

  • Existe algum framework "parecido" com o django? Onde temos: rotas, REST API, controle de middleware e Templates (usando jinja2 ou algo parecido) ?

andei pesquisando e encontrei o Buffalo, o problema é que foi arquivado...

Alguma dica?
Obrigado!

Carregando publicação patrocinada...
10

Beleza, vamos falar sobre essa migração de Django para Go, né? É uma variação de uma pergunta que vejo surgir todo dia, que vem com uma certa... vibe peculiar. Uma sensação de "brinquedo novo", se é que me entende.

Antes de entrar nos detalhes, deixa eu colocar meu chapéu de veterano por um momento. Já vi tecnologias virem e irem, subirem e caírem como impérios construídos na areia. E uma coisa que aprendi, gravada na minha alma de silício, é: Não conserte o que não está quebrado. Ou, como minha avó dizia, "Se a sopa está gostosa, por que mudar a receita?"

Você tem um projeto Django, em fase embrionária, sim, mas com trabalho real feito. Tem telas, tem código, tem algo tangível. Agora você está pensando em arrancar tudo isso e reconstruir em Go, simplesmente porque Go é a nova hype.

Sejamos francos: Go é incrível. A concorrência do Go, sua natureza compilada e sua simplicidade, são definitivamente algo deixar qualquer dev babando. Mas aqui está a questão, meu amigo: Velocidade só é uma vantagem se você precisa de velocidade.

Você está na fase inicial do seu projeto. O gargalo definitivamente não é seu código Python. É muito mais provável que seja desenvolvimento de funcionalidades, decisões de design, talvez até a construção da equipe. É como tentar vencer uma corrida de Fórmula 1 durante hora do rush no trânsito. Você pode ter um carro muito mais rápido, mas não vai chegar na frente de ninguém.

Agora, vamos imaginar, por um momento, que já passamos da fase inicial e o gargalo é o desempenho. Esse é o único cenário em que uma migração para Go faria sentido. Nesse caso, não se jogue de cabeça de uma vez. É como jogar fora toda a sopa quando você só precisa adicionar uma pitada de sal. Em vez disso, faça um profile detalhado da sua aplicação. Encontre os lugares onde seu código Python está realmente sofrendo.

É aqui que você aproveita a hyde de microsserviços do jeito certo. Não se trata de abandonar o Django, mas sim de aprimorá-lo. Você poderia construir um pequeno serviço Go que lida com a área problemática e comunicar-se com o Django com um protocolo rápido (como zmq) e obter a melhoria de velocidade que precisa sem reescrever todo o sistema.


Agora, sobre sua pergunta sobre "frameworks" que são "parecidos" com Django em Go. Veja bem, uma das maiores forças do Go é, também, um desafio: ele te encoraja a construir as coisas do "jeito Go". Ele tem a biblioteca padrão, muito rica e completa, e é nela que você deveria focar.

Tentar encontrar um framework Go que imite o Django é como tentar encontrar um pino quadrado para um buraco redondo. Sim, existem frameworks, alguns bem robustos como Gin ou Fiber, mas por que você iria querer usa-los? A força do Go está em construir serviços extramamente enxutos e de alto desempenho do zero. O jeito certo é usar a biblioteca padrão do Go para fazer tudo que você está acostumado a obter de um pip/npm isntall.

Se você quer algo o mais parecido possível com o django, a melhor opção é, de fato, aprender Rails e não Go!!!

Aqui está o ponto, e pode ser difícil de engolir: Se você vai para o Go, não procure um clone do Django. Abrace a filosofia do Go. Aprenda a construir aplicações web usando a biblioteca padrão do Go. Aprenda a lidar com roteamento, middleware e templates de uma forma mais fundamental. Você verá que será menos um desafio de "emular Django em Go" e mais uma aventura de "aprender a construir coisas do jeito Go".

Será mais difícil, mas é isso que trará os verdadeiros benefícios do Go para sua aplicação.

Então, antes de começar a arrancar seu código Django, pergunte-se: Por quê? É realmente por desempenho, ou é só o fascínio do novo? Se for o último, sugiro que você dê um passo para trás, sirva-se de uma xícara de café e pense se a grama é realmente mais verde do outro lado. Porque, às vezes, a grama em que já estamos é perfeitamente boa e tem tudo o que precisa.

Pragmatismo é a essência da engenharia. Não se perca na empolgação e nos modismos.

Um abraço e bons estudos!

1

Comentário excelente.
Eu quero acrescentar que o Django surgiu com o propósito de fazer APIs web usando Python de um jeito mais fácil, com o intuito de permitir que a linguagem já conhecida por muitos se tornasse uma boa ferramenta também para o mundo Web. O Python não foi desenvolvido pra isso.

Já o Go foi criado já com a intenção de resolver problemas que outras linguagens só resolveram com frameworks, por isso faz todo sentido usar ele do jeito dele. Se ele não for tão bom em alguma área, provavelmente vai surgir um framework pra isso.

1
4

Eu me fiz essa pergunta no começo de 2024, e cheguei na conclusão que não valia a pena "jogar fora" todo o conhecimento em Python/Django para simplesmente usar GO, eu decidi estudar a linguagem para caso seja necessário em algum momento implementar algo que necessite de alto desempenho usar. O que eu aprendi estudando Go, continuo estudando,:

  • Usar a linguagem "pura" é o que o mercado adotou
  • A linguagem foi criada para um problema que é a utilização de concorrência e paralelismo da forma correta, aproveitando ao máximo os processadores multi-core
  • As vagas são quase que exclusivas para desenvolvedores sênior/pleno
  • Existe uma forma Go de fazer as coisas, por isso não existem tantos frameworks, usar a lib padrão é o que o mercado faz.

Facilidades que não temos em Go comparando com Django:

  • Go não tem migrations como no Django
  • Go não tem o admin como no Django
  • Em Go trabalhar com os templates não é tão "fácil" como no Django.

Portanto minha dica é, estude para ter mais uma ferramenta mas como já foi dito, trocar apenas por trocar não faz sentido, principalmente no seu caso que pelo que eu entendi é um sistema que está em desenvolvimento, provavelmente sendo um MVP e a "velocidade" de desenvolvimento com Django não encontrei em nenhum outro lugar.

1

Existe o framework Goravel, inspirado no Laravel, inspirado no Rails, mas que hoje, devido ao seu ecossistema, já superou tanto o Rails quanto o Django. Apesar de que eu gosto mais da estrutura de pastas do Django.

1
1

Bom meu nobre, framework de baterias incluidas igual o Django, laravel e rails o Go não tem, pelo menos não igual a esses até porque não é o propósito do Go, ele nao é uma ferramenta de prototipagem, é para escrever sistemas inteiros.

Tanto que geralmente usam apenas a biblioteca padrão, frameworks populares são routers estilo flask por exemplo chi, fiber e gin.

Com o Go você vai ter um trade-off por um lado você ganha performance, tipagem bem definida e um bom ambiente de desenvolvimento com gerenciador de dependências bem feito, mas, por outro lado você não vai ter tanta coisa pronta como no Django ou seja vai fazer mais coisas na unha!

Eu sinceramente tentaria conciliar se possível para manter o painel administrativo do Django que é muito bom, saiba que o Go é relativamente tranquilo em poucas semanas você estará desenvolvendo tranquilamente.

1
1

Obrigado pela resposta.. olhei ele e achei interessante, o que me chamou a atenção é o tempo do ultimo release.. quase 2 anos atrás.. parece que frameworks deste tipo para GoLang é bem escasso...

2

Então, vai de encontro com o que o clacerda comentou, a bliblioteca padrão da linguagem já foi muito bem pensada, praticamente você consegue fazer tudo utilizando o que está no core dela, então os frameworks criados não trazem muitas vantagens digamos assim, uma coisa ou outra mais específica e talvez mais agilidade no desenvolvimento. Por isso que na minha visão frameworks para Go não tem tantas atualizações como em outras linguagens.

1

Realmente faz sentido nesse ponto mesmo... acostumado com python que praticamente quase toda semana tem atualização de packages...