Muito bom, com certeza em um projeto futuro vou trocar o gorm pelo sqlc, hoje utilizo o gorm numa arquitetura Hexagonal o que me permite fazer a mudança muito facilmente.
Tenho estudo o Golang e me deparei com essa parte, "o que usar para o banco?" Eu vi que recomendam usar o Sqlx ou Sql puro, o SqlX eu vi q tem uns recursos legais, mas esse esquema do SQLC.. poxa vida, curti! :)
Ja uso sqlc em todos meus projetos há algum tempo. Quanto menos ORM, melhor. Quanto ao fato de digitar mais. Github copilot ajuda bastante. Sem falar que "escrever muito" não deveria ser um problema pra quem usa Go. Afinal, um dos propósitos da linguagem é escrever mais e produzir um código mais fácil de ler.
Muito bom! Grato pelo videoaula. Ajuda bastante a melhorar a produtividade, identificação prévia de falhas e uso amplo dos recursos do banco de dados subjacente. Teria alguma dica para desacoplar os modelos gerados do domínio da aplicação? Obrigado
Único problema que estou enfrentando no sqlc hoje é realizar queries com joins (Dificuldade em mapear a entidade). Achei mais complicado que usar o driver padrão do pg do go. Seria interessante mostrar um exemplo no próximo vídeo.
Muito massa, uma duvida, como seria tipo, num pattern de repository e entities, como seria pra tipo extender os models gerados pra mapear num json depois, alguem tem um exemplo disso?
Acho interessante, mas neste caso, gosto de ter o controle mais privado do pool de conexões, sei que o SQLC deva ter uma forma de manipular, mas connection handling é muito importante dominar os pontos fortes e fracos na sua aplicação.
@@vormavius Cada caso deve ter uma solução, exemplo um relatório d-1, em uma instância exclusiva para relatórios, usaria porcedure, por diversos motivos, tempo de timeout, uso exclusivo da CPU, etc agora em app cloud, micro serviço, tenho a tendência em deixar as query mais simples, acredito que tenha lugar para cada tipo de solução
Trabalhando com sql puro, se por acaso o cliente trocar de banco como fica, tem bancos que tem query diferentes uma não roda no outro, tipo funções do banco na query. Altera todo o programa ?
É possível fazer queries dinamicas com filtros opcionais selecionados pelo usuário? A primeira vista sqlc parece que serve só para queries fixas, é isso mesmo?
olaa me chamo Evelyn sou editora de videos, vi alguns dos seu videos tenho certeza que tenho muito a agrega no seu conteudo por exemplo:cortes,texto personalizados,animacoes e musicas de fundo e etc... sei que tem muito talento adoraria trabalhar com vocÊ❤ edito tambem vídeos para eventos para homenagem, vídeos curtos(tiktok,reels,shorts..) e etc.. deixaria seus videos mais profissionais e qualificados espero sua resposta
Geralmente os ORMs tem maior ganho pra fazer CRUD e permitem executar queries em SQL Nativo pra evitar justamente os JOINs porcarias que podem ser gerados.
eu utilizo Gorm para acessar o banco dados; ai para fazer controle de versão do banco de dados (create table, alter table, etc...) eu utilizo o Flyway que é em java, é um pouco chato fazer dessa forma pois são dois projetos para gerenciar. Como voces fazem o versionamento do banco de dados em projetos em go?
O próprio Gorm possui um mecanismo de migration, porém ele não altera a estrutura de tabelas já criadas no banco (ex: o tipo de uma coluna) para evitar problemas com consistência de dados.
Já usei pra criar CTEs com naming params do sqlc e funcionou lindamente. Para relatórios complexos ainda não tive a oportunidade. Como alternativa, recomendo também o metabase (outra aplicação), vc pode gerar vários insights dos dados do seu banco e exportar a query. Aí poderia usar raw query direto no código para casos específicos que você ache difícil/custoso fazer com sqlc (ainda não vi um caso assim, porém)
Uso em projetos grandes e não fica bagunça. Você pode deixar seus arquivos sql e os models gerados pelo sqlc numa pasta dentro de /pkg do seu projeto, por exemplo. E dentro de /internal, por ex, consumir apenas os métodos que vão interagir com seu banco de dados. Assim, tudo que for código "auto gerado" vai ficar "fora do seu caminho" e você vai conseguir usar todo poder do sqlc e escrever um código extremamente semântico e fácil de ler.
Muito legal a ferramenta, e inclusive é capaz de olhar para os arquivos de DB Migrations e saber o schema atual, entendendo até alter tables.
Muito bom, com certeza em um projeto futuro vou trocar o gorm pelo sqlc, hoje utilizo o gorm numa arquitetura Hexagonal o que me permite fazer a mudança muito facilmente.
Gostei! Eu usava o GORM, mas nos ultimos projetos estava usando SQLX agora vou experimentar SQLC.
@gayachip, blz? Usando SQLX, como você trabalhava com consultas N+1?
Tenho estudo o Golang e me deparei com essa parte, "o que usar para o banco?" Eu vi que recomendam usar o Sqlx ou Sql puro, o SqlX eu vi q tem uns recursos legais, mas esse esquema do SQLC.. poxa vida, curti! :)
Eita nois Wesley, esbarrei com este cara outro dia atrás e resolvi testar. Realmente é muito bacana.
Meu caneco.... que show isso. Ja virei fan do sqlc
Ja uso sqlc em todos meus projetos há algum tempo. Quanto menos ORM, melhor. Quanto ao fato de digitar mais. Github copilot ajuda bastante.
Sem falar que "escrever muito" não deveria ser um problema pra quem usa Go. Afinal, um dos propósitos da linguagem é escrever mais e produzir um código mais fácil de ler.
Fiz uma api em GO usando GORM, mas pretendo migrar pro SQLC
Muito bom!
Grato pelo videoaula.
Ajuda bastante a melhorar a produtividade, identificação prévia de falhas e uso amplo dos recursos do banco de dados subjacente.
Teria alguma dica para desacoplar os modelos gerados do domínio da aplicação?
Obrigado
Isso é ótimo pra evitar SQL Injection, cria um certo padrão seguro
Show de bola!!
Único problema que estou enfrentando no sqlc hoje é realizar queries com joins (Dificuldade em mapear a entidade). Achei mais complicado que usar o driver padrão do pg do go. Seria interessante mostrar um exemplo no próximo vídeo.
Muito massa, uma duvida, como seria tipo, num pattern de repository e entities, como seria pra tipo extender os models gerados pra mapear num json depois, alguem tem um exemplo disso?
Acho interessante, mas neste caso, gosto de ter o controle mais privado do pool de conexões, sei que o SQLC deva ter uma forma de manipular, mas connection handling é muito importante dominar os pontos fortes e fracos na sua aplicação.
Não há nenhum impeditivo de gerenciar o pool de conexões em conjunto com o sqlc.
Estava justamente pensando sobre essa abordagem… Minha dúvida fica a cargo de um eventual controle da versão do banco de dados
Pra isso você pode usar a lib golang-migrate.
@@GambiarraCode não conhecia essa lib. Vou dar uma olhada. Valeu
Wesley, uma dúvida, pq não usar Procedures do banco de dados? Não é ruim subir toda a aplicação por causa de algo mais simples na query?
Oque é mais fácil escalar, sua aplicação ou o banco de dados? Quem é melhor eu evitar sobrecarregar?
@@vormavius Cada caso deve ter uma solução, exemplo um relatório d-1, em uma instância exclusiva para relatórios, usaria porcedure, por diversos motivos, tempo de timeout, uso exclusivo da CPU, etc agora em app cloud, micro serviço, tenho a tendência em deixar as query mais simples, acredito que tenha lugar para cada tipo de solução
Trabalhando com sql puro, se por acaso o cliente trocar de banco como fica, tem bancos que tem query diferentes uma não roda no outro, tipo funções do banco na query. Altera todo o programa ?
É possível fazer queries dinamicas com filtros opcionais selecionados pelo usuário? A primeira vista sqlc parece que serve só para queries fixas, é isso mesmo?
olaa me chamo Evelyn sou editora de videos, vi alguns dos seu videos tenho certeza que tenho muito a agrega no seu conteudo por exemplo:cortes,texto personalizados,animacoes e musicas de fundo e etc... sei que tem muito talento adoraria trabalhar com vocÊ❤ edito tambem vídeos para eventos para homenagem, vídeos curtos(tiktok,reels,shorts..) e etc.. deixaria seus videos mais profissionais e qualificados espero sua resposta
gostei bastante
Muito legal! Mas é uma pena não ter suporte para BD Oracle...😢
Ele gera alguns "type-safe" , existe algum jeito além do override usar apenas a tipagem nativa do go? ao invés de usar o NullString do sqlc?
Com o uso desse pkg com podemos controlar o versionamento da base de dados igual aos ORM ?
para isso use uma outra ferramenta chamada goose, eu uso goose + sqlc e é show
@@keven.gamero valeu pela dica, realmente é otima.
Você também faz join com essa biblioteca?
Primeiro
Geralmente os ORMs tem maior ganho pra fazer CRUD e permitem executar queries em SQL Nativo pra evitar justamente os JOINs porcarias que podem ser gerados.
eu utilizo Gorm para acessar o banco dados; ai para fazer controle de versão do banco de dados (create table, alter table, etc...) eu utilizo o Flyway que é em java, é um pouco chato fazer dessa forma pois são dois projetos para gerenciar. Como voces fazem o versionamento do banco de dados em projetos em go?
golang-migrate
O próprio Gorm possui um mecanismo de migration, porém ele não altera a estrutura de tabelas já criadas no banco (ex: o tipo de uma coluna) para evitar problemas com consistência de dados.
a questao nem é digitar muito na hora de digitar SQL puro, a questao principal é a vulnerabilidade de SQL injection...
vc ja passou por caso complexos de crud usando o sqlc? tipo subquery(exemplo)
Relatórios 🤔🤔🤔 interessante
Já usei pra criar CTEs com naming params do sqlc e funcionou lindamente. Para relatórios complexos ainda não tive a oportunidade. Como alternativa, recomendo também o metabase (outra aplicação), vc pode gerar vários insights dos dados do seu banco e exportar a query. Aí poderia usar raw query direto no código para casos específicos que você ache difícil/custoso fazer com sqlc (ainda não vi um caso assim, porém)
Achei o codigo uma bagunça mas se for pra coisa pequena beleza 👍
Uso em projetos grandes e não fica bagunça. Você pode deixar seus arquivos sql e os models gerados pelo sqlc numa pasta dentro de /pkg do seu projeto, por exemplo. E dentro de /internal, por ex, consumir apenas os métodos que vão interagir com seu banco de dados.
Assim, tudo que for código "auto gerado" vai ficar "fora do seu caminho" e você vai conseguir usar todo poder do sqlc e escrever um código extremamente semântico e fácil de ler.
show!!!
Alguém aqui usa a entgo (by Facebook)?
Sqlx no Rust
Consegui resposta a minha dúvida com base no exemplo do video ua-cam.com/video/YaGVURjB33I/v-deo.html, implementando DTO.
Grato.
como fosse adaptado "gRPC" porém com sql, só senti falta de testes unitários
A minha pergunta é o que você testaria? Se está tendo conexão com banco?
Acho que para essas funções cabe mais tests de integração do que unitários
@@Diegosantosphp 😅 talvez validar o sql e tratamento de erro ou programação defensiva
Ei amigo poderia avaliar isso, framework front end em go
ua-cam.com/video/nkyiATkZ4Js/v-deo.html
Muito bom