SQLC: Acabou o SQL puro para trabalhar com Golang

Поделиться
HTML-код
  • Опубликовано: 10 фев 2025
  • Nesse vídeo vamos falar sobre SQL puro vs ORM na linguagem go. Também mostro a abordagem de trabalhar com sql de forma compilado utilizando a ferramenta sqlc.
    Link para o curso Go Expert: goexpert.fullc...
    Repositório do vídeo: github.com/dev...

Комментарии • 52

  • @kimprado1597
    @kimprado1597 2 месяца назад

    Muito legal a ferramenta, e inclusive é capaz de olhar para os arquivos de DB Migrations e saber o schema atual, entendendo até alter tables.

  • @jamalmelo
    @jamalmelo 2 года назад +7

    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.

  • @arilson.santos
    @arilson.santos 11 месяцев назад +2

    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! :)

  • @gayachip
    @gayachip Год назад +4

    Gostei! Eu usava o GORM, mas nos ultimos projetos estava usando SQLX agora vou experimentar SQLC.

    • @arilson.santos
      @arilson.santos 9 месяцев назад +1

      @gayachip, blz? Usando SQLX, como você trabalhava com consultas N+1?

  • @alcancebrasil4467
    @alcancebrasil4467 2 года назад

    Eita nois Wesley, esbarrei com este cara outro dia atrás e resolvi testar. Realmente é muito bacana.

  • @mateusprado8715
    @mateusprado8715 3 месяца назад +1

    Fiz uma api em GO usando GORM, mas pretendo migrar pro SQLC

  • @reinan.gabriel
    @reinan.gabriel 2 года назад +1

    Show de bola!!

  • @carlosoliveira4312
    @carlosoliveira4312 Год назад

    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

  • @arozendojr
    @arozendojr 2 года назад +1

    gostei bastante

  • @WaldirBorbaJunior
    @WaldirBorbaJunior Год назад +1

    Meu caneco.... que show isso. Ja virei fan do sqlc

  • @GambiarraCode
    @GambiarraCode 2 года назад +6

    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.

  • @mreduardobarbosa
    @mreduardobarbosa 10 месяцев назад

    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 ?

  • @thalesgelinger
    @thalesgelinger 9 месяцев назад

    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?

  • @cebolinharenato
    @cebolinharenato 11 месяцев назад

    É 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?

  • @duducv
    @duducv 10 месяцев назад

    Ú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.

  • @Joaomigguel007
    @Joaomigguel007 Год назад

    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?

  • @rafaelcarvalho2918
    @rafaelcarvalho2918 Год назад +2

    Com o uso desse pkg com podemos controlar o versionamento da base de dados igual aos ORM ?

    • @keven.gamero
      @keven.gamero Год назад +1

      para isso use uma outra ferramenta chamada goose, eu uso goose + sqlc e é show

    • @rafaelcarvalho2918
      @rafaelcarvalho2918 Год назад

      @@keven.gamero valeu pela dica, realmente é otima.

  • @AlandeAlmeidaMatias
    @AlandeAlmeidaMatias 2 года назад +2

    Estava justamente pensando sobre essa abordagem… Minha dúvida fica a cargo de um eventual controle da versão do banco de dados

    • @GambiarraCode
      @GambiarraCode 2 года назад +1

      Pra isso você pode usar a lib golang-migrate.

    • @AlandeAlmeidaMatias
      @AlandeAlmeidaMatias 2 года назад

      @@GambiarraCode não conhecia essa lib. Vou dar uma olhada. Valeu

  • @lucianob.ferenczuk5698
    @lucianob.ferenczuk5698 2 года назад

    show!!!

  • @imf4ll
    @imf4ll Год назад

    Isso é ótimo pra evitar SQL Injection, cria um certo padrão seguro

  • @Dsouza10082
    @Dsouza10082 7 месяцев назад

    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.

    • @FullCycle
      @FullCycle  7 месяцев назад

      Não há nenhum impeditivo de gerenciar o pool de conexões em conjunto com o sqlc.

  • @TheMariossj
    @TheMariossj Год назад

    Muito legal! Mas é uma pena não ter suporte para BD Oracle...😢

  • @dbsouza
    @dbsouza 2 года назад +4

    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?

    • @vormavius
      @vormavius 2 года назад +1

      Oque é mais fácil escalar, sua aplicação ou o banco de dados? Quem é melhor eu evitar sobrecarregar?

    • @arozendojr
      @arozendojr 2 года назад

      @@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

  • @RicardoArtale
    @RicardoArtale 2 года назад +3

    Primeiro

  • @gabrielaraujodesouza8834
    @gabrielaraujodesouza8834 2 года назад

    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?

    • @GambiarraCode
      @GambiarraCode 2 года назад

      golang-migrate

    • @turock360
      @turock360 Год назад

      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.

  • @devguialves
    @devguialves Год назад

    Você também faz join com essa biblioteca?

  • @evelynteles1242
    @evelynteles1242 2 года назад +4

    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

  • @WanderDouglasTI
    @WanderDouglasTI 2 года назад +1

    vc ja passou por caso complexos de crud usando o sqlc? tipo subquery(exemplo)

    • @arozendojr
      @arozendojr 2 года назад

      Relatórios 🤔🤔🤔 interessante

    • @GambiarraCode
      @GambiarraCode 2 года назад +1

      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)

  • @artu_almeida
    @artu_almeida 2 года назад

    a questao nem é digitar muito na hora de digitar SQL puro, a questao principal é a vulnerabilidade de SQL injection...

  • @lucianoteixeira576
    @lucianoteixeira576 2 года назад

    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.

  • @fsilva1985
    @fsilva1985 2 года назад +1

    Achei o codigo uma bagunça mas se for pra coisa pequena beleza 👍

    • @GambiarraCode
      @GambiarraCode 2 года назад

      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.

  • @fernandomarca
    @fernandomarca 10 месяцев назад

    Sqlx no Rust

  • @gdalfovo
    @gdalfovo 2 года назад

    Alguém aqui usa a entgo (by Facebook)?

  • @carlosoliveira4312
    @carlosoliveira4312 Год назад

    Consegui resposta a minha dúvida com base no exemplo do video ruclips.net/video/YaGVURjB33I/видео.html, implementando DTO.
    Grato.

  • @arozendojr
    @arozendojr 2 года назад +1

    como fosse adaptado "gRPC" porém com sql, só senti falta de testes unitários

    • @Diegosantosphp
      @Diegosantosphp 2 года назад +4

      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

    • @arozendojr
      @arozendojr 2 года назад +1

      @@Diegosantosphp 😅 talvez validar o sql e tratamento de erro ou programação defensiva

  • @MacacoNinja
    @MacacoNinja Год назад

    Ei amigo poderia avaliar isso, framework front end em go
    ruclips.net/video/nkyiATkZ4Js/видео.html

  • @mateus-dev-me
    @mateus-dev-me 7 месяцев назад

    Muito bom