Como implementar uma API do ZERO com Golang e PostgreSQL!!!

Поделиться
HTML-код
  • Опубликовано: 18 сен 2024
  • DESCONTO DE 20% EM CURSOS E IMERSÃO:
    Cupom: GOPHER20
    Cursos
    🚀 GO 101: bit.ly/3mdWHpK
    🤓 Imersão Aprenda Golang: bit.ly/3KKXHgM
    📈 Testes e Benchmarks: bit.ly/3HcIVhZ
    🖥. API RESTful em Go com Fiber & MongoDB: bit.ly/43EB1Hx
    =====================
    Livros recomendados
    📙 A linguagem de programação Go: amzn.to/3GZO2yJ
    📒 Algoritmos: amzn.to/43FNlra
    📓 Programming Pearls: amzn.to/3KGB9NZ
    📕 Implementando Domain-Driven Design: amzn.to/3oikIA6
    📘 Domain-Driven Design: amzn.to/3UJu7wP
    📔 Learning Go: amzn.to/3mI6Aje
    =====================
    📰 Nossa newsletter: eepurl.com/ibiajL
    Como implementar uma API do ZERO com Golang e PostgreSQL!!!
    Nesse vídeo vamos implementar uma API do ZERO utilizando Golang + PostgreSQL, incluindo levantar um container PostgreSQL no docker, criar tabela, setar permissões e testar tudo isso postman.
    ✅ HTTP Status: httpstatus.com.br
    Music from Uppbeat (free for Creators!):
    uppbeat.io/t/a...
    License code: HBM4AY6GCBE28SNU
    =====================
    Quem sou eu?
    Olá, meu nome é Tiago Temporin. Trabalho com desenvolvimento de software desde 2009. Ao longo dessa jornada, já trabalhei com PHP, Javascript, Java, C, Python e Go.
    Meu primeiro contato com Go foi em meados de 2012, e desde de então nunca mais parei.
    Esse canal foi criado para compartilhar todo o conhecimento adquirido ao longo de tantos anos. Meu intuito é ajudar você a aprender essa maravilhosa linguagem, assim como conceitos básicos de programação.
    =====================
    Equipamento
    🖥 Monitores - 2x Samsung 24" curvo: amzn.to/3qfz0zk
    🖱 Mouse - Logitech 305G: amzn.to/3JoBB1w
    📷. Webcam - Logitech C505: amzn.to/3N0gmFs
    💻 Notebook - Macbook Air: amzn.to/3MUgSVw
    🎧. Fone - HyperX Cloud Stinger: amzn.to/3qgP9Vo
    🎙 Microfone - HyperX QuadCast: amzn.to/3639XZN
    =====================
    Site e Redes Sociais
    📰 Newsletter: www.getrevue.c...
    🌎 Blog: aprendagolang....
    📷. Insta: / aprendagolang
    🐦. Twitter: / _ttemporin
    💬. Reddit: / aprendagolang
    =====================
    #go #golang #postgresql #api #example #tutorial

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

  • @ramongiorgi1095
    @ramongiorgi1095 2 года назад +36

    Uma boa dica seria colocar indice nesses tipos de videos, ajuda bastante a galera iniciante a nao se perder em cada e etapa sem contar que pode voltar na hora exata.

  • @alexribeiro6400
    @alexribeiro6400 Год назад +7

    Outro caminho para configs que seria muito interessante, levando em conta que é uma API, seria o uso de variáveis de ambiente para ficar melhor portável.

  • @junyorff12
    @junyorff12 Год назад +3

    Go é uma linguagem muito agradável de ler! Ótimo video.

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

    Muito brabo, só senti falta de ir desenvolvendo e testando. Acho q quando está no começo do aprendizado, é proveitoso ver tudo o q está passando, como se estivesse debugando. Mas muito bom teu conteúdo, vlw mestre

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

    Cara, sensassional, que conteudo foda, parabéns irmão, muito bom sua didatica e como tu explica cada passo. Por favor continue assim!!!

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

    Que massa, nunca tinha utilizado o docker, agora entendi

  • @marcelbarbosa281
    @marcelbarbosa281 10 месяцев назад +1

    Adorei bastante o vídeo, ótimo trabalho Tiago, me ajudou muito, valeu!

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

    Excelente video, gostei do padrão do projeto também. Você poderia fazer um video explicando como utilizaria um pool de conexões? O problema é que abrir e fechar as conexões a cada ação, tem um custo e geralmente em muitos acessos simultâneos o banco é amassado pela quantidade de conexões abertas.
    Como você aborda isso em produção?

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

      Obrigado!
      Concordo com o que você disse. Inclusive fiz um post explicando um pouco sobre como funciona o package database/sql => aprendagolang.com.br/2022/07/06/como-funciona-a-gestao-de-conexoes-com-banco-de-dados-do-package-database-sql/
      Sobre o vídeo, é uma boa idéia, vou ver se faço no próximo mês.

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

      @@AprendaGolang grato pela resposta. Não sabia que existia um blog também, vou dar uma lida.

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

    Adorei a aula.

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

    Obrigado! Aprendi bastante. Ótimo vídeo

  • @undefined-null-none
    @undefined-null-none 2 года назад +2

    Caraca, seu canal é excelente

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

    Top seu Vídeo! Muito didático!

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

    Excelente vídeo! Pra quem vem de outras linguagens é meio estranho ver essa bazuca que é o Go sendo utilizada pra matar mosquito haha (brincadeiras a parte eu compreendi o intuito do vídeo), mas pelo tanto que o Go é poderoso tenho certeza que processamentos mais pesados tiram muita vantagem dele. Parabéns pelo conteúdo.

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

    Estou iniciando no GoLang e gostei muito do video e da didática, Vlw

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

    Muito foda man, vou usar para fazer o deploy dos meus modelos de machine learning

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

    Cara muito bom o vídeo! Salvou-me

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

    Meu mano, no minuto 16 voce salva minha vida!!!!!!!!!!!!!!!!!

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

    Gostei muito de vídeo parabéns ,você tem algum vídeo mostrando como colocar swagger na API com GO

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

    Excelente vídeo! Obrigado por comparilhar seu conhecimento.

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

    Parabéns pelo conteúdo, salvou!
    Se possível sobe os projetos que você faz no gitgub e compartilha com a gente (na descrição), obrigado!!!
    Outra coisa também, você disse que em uma aplicação maior não ficaria dessa forma, poderia fazer um vídeo de como ficaria?
    Agradeço a atenção, muito sucesso para ti!

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

      Para aplicações maiores, vou publicar um curso que explica vários conceitos.
      Se tiver interesse, é só deixar o nome e email nessa lista que em breve vamos entrar em contato => forms.gle/dFGmLjEeeBHc7ZeK7

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

      @@AprendaGolang Preenchi, gostei na iniciativa, seria muito TOP um curso completo do zero (nem reutilize o Go 101), até as aplicações maiores a nível de produção

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

    Muito bom mano esse vídeo ❤🎉

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

    Excelente! Estou iniciando em Go e este exemplo além de bom é completo. Só uma dúvida. Que tema você usa no vscode ? Que extensões recomenda no vscode para Go ?
    Obrigado ;)

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

      Obrigado!
      Eu uso o nord (www.nordtheme.com/).
      Sobre plugins, eu uso o Go, que é desenvolvido pelo Go Team da Google.

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

    Muito boa a explicação, teria como explicar como usar multi stage com o scratch pra essa aplicação?

  • @cristian.__.
    @cristian.__. 2 года назад +4

    Muito bom o vídeo, só não tive sucesso nas requests que usam id.
    exemplo:
    [postman] GET localhost:9000/1 → internal server error
    no terminal onde tá rodando main .go tem o erro:
    " Erro ao fazer parse do id: strconv.Atoi: parsing "": invalid syntax "
    parece que o id não está chegando em Atoi
    comparei o código aqui com o do video em 58:00 e está igual:
    func Get(w http.ResponseWriter, r *http.Request) {
    id, err := strconv.Atoi(chi.URLParam(r, "id"))
    if err != nil {
    log.Printf("Erro ao fazer parse do id: %v", err)
    http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
    return
    }
    ...
    Agora quando eu passo o id assim: localhost:9000/?id=1 não dá erro, mas também retorna todas as tarefas
    o mesmo ocorre para update e delete

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

      Como está o seu r.Get?

    • @cristian.__.
      @cristian.__. 2 года назад +2

      @@AprendaGolang
      r := chi.NewRouter()
      r.Post("/", handlers.Create)
      r.Put("/{id}", handlers.Update)
      r.Delete("/{id}", handlers.Delete)
      r.Get("/", handlers.List)
      r.Get("/{id}", handlers.Get)
      Qualquer dia desses eu tento revisar reassistindo o vídeo todo. Deve ter algo que eu acabei não fazendo igual.

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

      Fiquei com o mesmo problema

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

      Cara esse id é path variable e não url param com vc tá passando é /1

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

      Pra quem tiver esse problema, no meu caso, era a versão do chi que estava diferente.
      Quando usei nos handlers, o vs code fez o auto import da versão base, mas la no main o vs code fez o import da versão v5. Atualizando todos para a mesma versão resolveu esse problema

  • @MateusSilva-hq6fe
    @MateusSilva-hq6fe Год назад +1

    quando eu rodo go run main.go ele não sustenta e simplesmente volta para o estado normal do terminal. Ele não retorna nenhum erro.

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

    Muito bom! Agora, fiquei meio "pah" com fato de você estar "codando" e não escreve/fazer nenhum tipo de teste. É assim mesmo o workflow de dev go? Tem alguma técnica pra debugar, ou ir fazendo evaluation a medida que escreve as funções. Mais uma vez parabéns pelo conteúdo.

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

      Obrigado.
      Na verdade não. Foi só para esse vídeo mesmo que não quis entrar nessa parte para não ficar ainda mais extenso.

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

    Rapaz, eu estou programador na linx/Stone uma baita empresa mas sou de uma linguagem legada, e lá estou na vertical de FOOD que usa pesado estrutura microsoft C# Core, e Azure e tals. Dai fico no dilema estudar c# lá dizem ser uma linguagem muito robusta, e que pra buness e c# kkk, mas eu fico naquela se quando converso com devs de lá e só sendo saudosista, dai pensando em oportunidade dentro da propria empresa cheguei a começar estudar c#, mas a liguaguem não me causa atração, eu mechi já com node um pouco e senti bastante prazer, e dei uma brincada com golang e curti muito. Dai fico na mega duvida, eu preciso definir um foco não posso tenta estudar 3 linguagem ao mesmo tempo. E agora começo a querer escolher go e ser feliz, e pensar que exista um mundo além da empresa onde estou hoje. Até ouço falar que lá usa node em outras verticais mas na nossa não usa puramente c#.

  • @alineconchetta5045
    @alineconchetta5045 5 месяцев назад +1

    Não consegui realizar a conexão com db

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

    obrigado

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

    Tiago, em 19:30 você comenta que não é bom usar "panic()" em prod, qual seria o correto? Utilizar um log.fatal? ou dar o log no prompt/armazenar sem interromper a execução?

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

    Oi fiquei com uma dúvida, como é criado arquivo go.mod? Ele deu uns erros por esse arquivo não existir e tals

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

      go.mod é o arquivo de quando vc cria um módulo em go.
      basicamente é o seguinte, vai na pasta onde tá seus arquivos, no caso do vídeo é a pasta API-POSTGRESQL e digita o comando "go mod init nome_do_modulo" (sem as aspas)

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

      @@CaarabaloneDZN Okay, o "nome_do_modulo" é o nome da pasta ou pode ser qualquer um

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

      Pode ser qualquer um. Normalmente colocamos o nome do repositório do github, por exemplo: "go mod init github.com/aprendagolang/api-postgres"

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

      @@AprendaGolang valeu

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

    É possível ter acesso ao código fonte desenvolvido no vídeo?

  • @dev.caixeiroviajante
    @dev.caixeiroviajante Год назад

    Desculpa a ignorância, cara.
    No 31:09 do vídeo, porque não fez igual o Insert atribuindo o método ao struct para atribuir os valores recebidos pela query ao Todo ?
    Nao sei se minha pergunta ficou clara.

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

    como vc organizaria essas pastas baseadas naquele esquema do seu vídeo sobre organizaçao de projetos em go??

  • @vitord.cardoso4666
    @vitord.cardoso4666 Год назад +1

  •  5 месяцев назад

    Isso tá certo? Abrir conexão fechar conexão?

  • @alph4b3th
    @alph4b3th 4 месяца назад

    Qual distro linux você usa?

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

    Muito Bom o vídeo!! Só ficou uma dúvida com Viper e possível verificar a variável de ambiente procurando pelos valores de conexão do banco e caso não exista ele pega do config.toml?

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

      Obrigado.
      O Viper sozinho não, mas é possível implementar essa lógica e utilizar ele como um auxilio para a parte de leitura do config.toml.

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

    Ótimo vídeo, só tenho uma dúvida. Em relação ao Go mod, vc poderia deixar os go Get para utilizarmos?

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

      que versão do go vc usa??

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

      @@pedroqueiroga9299 acredito que a ultima que lançou. FIz o download recentemente em minha maquina

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

    Ótimo vídeo! Seus vídeos têm me ajudado bastante no aprendizado.
    Consegui fazer tudo certinho, mas tô tendo um problema com o password: "Ocorreu um erro ao tentar inserir: pq: password authentication failed for user \"user_todo\""
    Já refiz tudo, troquei a senha, mas nada funcionou. Alguém teve esse problema?

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

      o meu deu a mesma coisa

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

      Segundos depois dele fazer a primeira request, ele passa o comando:
      grant all privileges on all tables in schema public to user_todo;
      Com isso, teoricamente funcionaria. Eu tentei usar o user "postgres" ao invés de "user_todo" e também funcionou

    • @Guilherme-ff7xy
      @Guilherme-ff7xy 9 месяцев назад +1

      @@lucaslourenco103 vc conseguiu arrumar? o meu da o mesmo problema

    • @DevGabs
      @DevGabs 14 дней назад

      @@altamirsantos6030 vei tentei fazer tudo isso e não mudou. continuou dando o mesmo erro.

  • @a-n-d-e-r-s-o-n
    @a-n-d-e-r-s-o-n Год назад +2

    Pra mim não funcionou a conexão com o DB!

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

    cara, sou iniciante ainda. vc pode explicar pra que serve o arquivo .toml??

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

      São arquivos para colocar configurações, como acesso ao banco de dados, porta que o servidor vai ouvir e etc..

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

    Olá boa noite uma dúvida
    Essa api também funciona se o banco for o mysql? Ou só postgres ?

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

      Funciona com MySQL também. Teoricamente só precisa mudar o drive de conexão, o restante é igual.

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

      Obrigado mano ❤️

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

    Opa, amigo. Por acaso esse repositório estaria fora do ar?? Pq não consigo acessá-lo

    • @AprendaGolang
      @AprendaGolang  Год назад +3

      Estou com o github desatualizado. Na próxima semana isso deve mudar.

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

      @@AprendaGolang up esse projeto por favor erro ao buscar todos os registros: pq: SSL is not enabled on the server

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

    consigo subir um banco de dados fake, pra executar testes e2e?

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

      Consegue sim. Nesse post aqui eu abordo iso => aprendagolang.com.br/2022/09/01/como-fazer-teste-unitario-no-gorm-com-testify-e-sqlmock/

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

    link do git

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

    Mano pode ser burrice minha
    Mas eu n consigo por o sinal de diferente no computador não kkk “≠ “ estou no celular daí vai mas no computador n faço ideia de como colocar
    10:54.

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

      Opa! tudo certo? É só colocar um "!=" sem as aspas.
      A fonte que uso no vscode transforma nesse outro sinal.

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

      @@AprendaGolang ha entendi , obrigado!!!

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

    Muitooooo booommmmm. Valeu muito obrigado