Meu projeto para a Rinha de Backend usando Vlang (Passo a passo, dicas, procedure, infra, etc.)
Fala galera, como prometido, aqui está o repositório do meu projeto para estudar a linguagem V: https://github.com/marcoagpegoraro/ri... Também vou deixar o repositório da rinha de backend mostrando o passo a passo de como fazer a entrega, lembrando que o tempo para entrega dos projetos vai até dia 10/03/2024: https://github.com/zanfranceschi/rinh... Como este canal está no inicio, ele não possúi monetização ainda, mas caso queira me ajudar com um pix de qualquer valor, vou estar deixando essa chave pix aqui: c827a9ac-26cf-4740-b486-6445b8feba18 Um abraço a todos, e boa sorte caso queira participar também! Alguns links relevantes: https://vlang.io https://github.com/vlang/v/blob/maste... https://modules.vlang.io/vweb.html https://modules.vlang.io/db.pg.html https://modules.vlang.io/orm.html ERRATAS: 1. No momento que falo do mapeamento da lista de models.Transacao para dtos.TransacaoDto, analisando melhor, é bem fácil de entender a função, você passa dentro dos colchetes a structure que você tem e qual structure você quer mapear, em seguida, você passa como argumento da função a lista e uma função que vai receber o index e a structure da lista, por fim você declara que a função vai retornar a structure desejada, e dentro você faz o mapeamento. 2. Eu falo no vídeo que criei uma Stored Procedure, mas na verdade eu criei uma Stored Function, uma stored procedure não consegue retornar valor igual eu fiz, mas as functions conseguem. 3. Também fiz algumas modificações depois do vídeo, os indices que estavam com o mesmo nome, agora estão com o nome diferente, e fazendo o indice pelas variaveis corretas. 4. Dentro da stored function, no final do SELECT, coloquei o FOR UPDATE, com isso, a linha é travada e não é liberada até ter o COMMIT da transação, resolvendo definitivamente os problemas de concorrencia ao atualizar o saldo. 5. Por que não estou utilizando network mode host? Na ultima rinha de backend, foi visto que um dos grandes gargalos era por conta da infra do docker rodando em modo bridge, então muitos participantes da atual rinha fizeram o Docker Compose rodar em modo host, mas eu decidi ficar no modo bridge mesmo sabendo que o desempenho seria pior. Fiz isso por alguns motivos: 5.1. O readme da rinha fala que o modo bridge já deve ser adequado a carga do teste. 5.2. Quero que pessoas que estejam no Windows e macOS consigam rodar meu docker compose sem precisar fazer nenhum tipo de gambiarra. 6. Modifiquei a estrutura do meu projeto, descobri que tem como deixar o código em uma pasta src, e os modulos dentro de pastas também, igual no Go, então fiz isso para deixar mais organizado e o a imagem docker com uns megabytes a menos pois agora não precisa mandar o projeto inteiro para dentro da imagem, só a pasta src. 7. Estou criando as tabelas como UNLOGGED TABLE no postgres, a performance aumentou drasticamente, realmente acho que era a ultima peça que estava faltando para minha aplicação atingir os sub 10ms para o 75 pct no gattling. Nesse artigo você encontra mais informações sobre esse tipo de tabela e os prós e contras: https://www.crunchydata.com/blog/post.... 8. Como apontado pelo @FlyingVforVendetta, existe uma extensão melhor para usar no vscode para quem programa em V chamada "v-analyzer". 9. Como apontado pelo @greidinger-reis, a minha foreign key de cliente para transação está configurada incorretamente, pegando pelo "id" e não "id_cliente", e é possível fazer transaction no V utilizando o app.db.exec('BEGIN')! e app.db.exec('COMMIT')!. Minhas redes sociais: Blog: https://marcoagpegoraro.com.br Portfolio: https://marcoagpegoraro.github.io LinkedIn: / marco-antonio-goncalves GitHub: https://github.com/marcoagpegoraro Medium: / tete5423 Timestamps do vídeo: 0:00 - Introdução 1:54 - Falando sobre a rinha 7:19 - A linguagem de programação V 8:17 - Documentação do Vlang 9:00 - Standart library 9:57 - Meu código 10:50 - Arquivo main 12:40 - Models do banco de dados 13:45 - DTOs 14:00 - Controller de cliente 14:30 - Get extrato do cliente 17:47 - Post transação 19:38 - Por que usei uma stored procedure? 21:00 - Mostrando a procedure 24:10 - Retorno da procedure 25:17 - Continuando a request 26:13 - Dockerfile 27:50 - Docker Compose 30:17 - Testando a aplicação 31:34 - Enviando para o repo da rinha 31:50 - Participem da rinha! 32:21 - O resultado do stress test do Gatling

AWS SAM - Criação e Deploy de Lambdas - Aula 1

HYPERFOCUS MODE | Brainwave Focus Music for Deep Work

GDG Talk - 26/03/2020 - Como o Dart pode ser usado para criar uma aplicação backend

Qual a Diferença Entre Terminal e Shell?

Entenda essa imagem e aprenda o que quiser na vida

Google DeepMind Distinguished Eng (L9): How To Land a Job at a Frontier Lab | Vlad Feinberg

Deep Work Music | Alpha Waves for Focus and Brain Power - Flow State Coding Music Mix 2026

Building an AI Dark Factory: A Codebase That Writes Its Own Code, Live

Santo Rosário | Sexta-feira | 04:00 | 03/07/2026 | Live Ao vivo

Fantástico: homem volta para casa após 15 anos preso por um crime que não cometeu

🔥 GOD UNLEASHES the Truth | Psalms 23, 35, 91 and 112 To Break Curses and Activate Abundance

Zig 2026: No-AI Policy, $670K Foundation, Left GitHub & Why Zig Isn’t 1.0 - Andrew Kelley Explains

Harvard Professor: CS50, What Matters More Than Programming Now, Lecturing Well | David J Malan

Como fazer deploy de aplicação PHP usando Docker

Creator of C++: Bell Labs, Negative Overhead Abstraction, Mistakes | Bjarne Stroustrup

An introduction to V - the vlang

Complete Terraform Course - From BEGINNER to PRO! (Learn Infrastructure as Code)

Is it still worth learning programming? How would I start today?

Dios Te Dice Hoy: Mantén Tu Calma — Él Se Encarga De Lo Imposible

