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.
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
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.
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 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.
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
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.
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.
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?
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.
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
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#.
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 ;)
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)
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?
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.
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.
Ó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?
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
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.
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
Go é uma linguagem muito agradável de ler! Ótimo video.
Cara, sensassional, que conteudo foda, parabéns irmão, muito bom sua didatica e como tu explica cada passo. Por favor continue assim!!!
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.
Adorei bastante o vídeo, ótimo trabalho Tiago, me ajudou muito, valeu!
Que massa, nunca tinha utilizado o docker, agora entendi
Estou iniciando no GoLang e gostei muito do video e da didática, Vlw
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
Meu mano, no minuto 16 voce salva minha vida!!!!!!!!!!!!!!!!!
Caraca, seu canal é excelente
Adorei a aula.
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.
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.
Muito foda man, vou usar para fazer o deploy dos meus modelos de machine learning
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?
Top seu Vídeo! Muito didático!
Gostei muito de vídeo parabéns ,você tem algum vídeo mostrando como colocar swagger na API com GO
Cara muito bom o vídeo! Salvou-me
É possível ter acesso ao código fonte desenvolvido no vídeo?
Excelente vídeo! Obrigado por comparilhar seu conhecimento.
Obrigado! Aprendi bastante. Ótimo vídeo
Disponha!
Tiago como eu faço pra entregar em contato com você ?
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.
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 boa a explicação, teria como explicar como usar multi stage com o scratch pra essa aplicação?
Muito bom mano esse vídeo ❤🎉
Não consegui realizar a conexão com db
Qual distro linux você usa?
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.
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#.
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.
Isso tá certo? Abrir conexão fechar conexã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
como vc organizaria essas pastas baseadas naquele esquema do seu vídeo sobre organizaçao de projetos em go??
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
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..
obrigado
link do git
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.
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
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!!!
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!!!
Ó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.
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 ❤️
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/
❤
Muitooooo booommmmm. Valeu muito obrigado