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
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.
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.
Go é uma linguagem muito agradável de ler! Ótimo video.
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
Cara, sensassional, que conteudo foda, parabéns irmão, muito bom sua didatica e como tu explica cada passo. Por favor continue assim!!!
Que massa, nunca tinha utilizado o docker, agora entendi
Adorei bastante o vídeo, ótimo trabalho Tiago, me ajudou muito, valeu!
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?
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.
@@AprendaGolang grato pela resposta. Não sabia que existia um blog também, vou dar uma lida.
Adorei a aula.
Obrigado! Aprendi bastante. Ótimo vídeo
Disponha!
Caraca, seu canal é excelente
Top seu Vídeo! Muito didático!
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.
Estou iniciando no GoLang e gostei muito do video e da didática, Vlw
Muito foda man, vou usar para fazer o deploy dos meus modelos de machine learning
Cara muito bom o vídeo! Salvou-me
Meu mano, no minuto 16 voce salva minha vida!!!!!!!!!!!!!!!!!
Gostei muito de vídeo parabéns ,você tem algum vídeo mostrando como colocar swagger na API com GO
Excelente vídeo! Obrigado por comparilhar seu conhecimento.
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!
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
@@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
Muito bom mano esse vídeo ❤🎉
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 ;)
Obrigado!
Eu uso o nord (www.nordtheme.com/).
Sobre plugins, eu uso o Go, que é desenvolvido pelo Go Team da Google.
Muito boa a explicação, teria como explicar como usar multi stage com o scratch pra essa aplicação?
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
Como está o seu r.Get?
@@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.
Fiquei com o mesmo problema
Cara esse id é path variable e não url param com vc tá passando é /1
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
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.
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.
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.
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#.
Não consegui realizar a conexão com db
obrigado
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?
Oi fiquei com uma dúvida, como é criado arquivo go.mod? Ele deu uns erros por esse arquivo não existir e tals
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)
@@CaarabaloneDZN Okay, o "nome_do_modulo" é o nome da pasta ou pode ser qualquer um
Pode ser qualquer um. Normalmente colocamos o nome do repositório do github, por exemplo: "go mod init github.com/aprendagolang/api-postgres"
@@AprendaGolang valeu
É possível ter acesso ao código fonte desenvolvido no vídeo?
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.
como vc organizaria essas pastas baseadas naquele esquema do seu vídeo sobre organizaçao de projetos em go??
❤
Isso tá certo? Abrir conexão fechar conexão?
Qual distro linux você usa?
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?
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.
Ótimo vídeo, só tenho uma dúvida. Em relação ao Go mod, vc poderia deixar os go Get para utilizarmos?
que versão do go vc usa??
@@pedroqueiroga9299 acredito que a ultima que lançou. FIz o download recentemente em minha maquina
Ó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?
o meu deu a mesma coisa
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
@@lucaslourenco103 vc conseguiu arrumar? o meu da o mesmo problema
@@altamirsantos6030 vei tentei fazer tudo isso e não mudou. continuou dando o mesmo erro.
Pra mim não funcionou a conexão com o DB!
nao sei se mais alguém teve dificuldades com essa parte...
comigo também!!!
cara, sou iniciante ainda. vc pode explicar pra que serve o arquivo .toml??
São arquivos para colocar configurações, como acesso ao banco de dados, porta que o servidor vai ouvir e etc..
Olá boa noite uma dúvida
Essa api também funciona se o banco for o mysql? Ou só postgres ?
Funciona com MySQL também. Teoricamente só precisa mudar o drive de conexão, o restante é igual.
Obrigado mano ❤️
Opa, amigo. Por acaso esse repositório estaria fora do ar?? Pq não consigo acessá-lo
Estou com o github desatualizado. Na próxima semana isso deve mudar.
@@AprendaGolang up esse projeto por favor erro ao buscar todos os registros: pq: SSL is not enabled on the server
consigo subir um banco de dados fake, pra executar testes e2e?
Consegue sim. Nesse post aqui eu abordo iso => aprendagolang.com.br/2022/09/01/como-fazer-teste-unitario-no-gorm-com-testify-e-sqlmock/
link do git
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.
Opa! tudo certo? É só colocar um "!=" sem as aspas.
A fonte que uso no vscode transforma nesse outro sinal.
@@AprendaGolang ha entendi , obrigado!!!
Muitooooo booommmmm. Valeu muito obrigado