Como Usar o DB Next Scan e Ler Registros do Banco de Dados MySQL - Aula de Golang (API)
Video Transcript
Lá pessoal estamos de volta mais uma aula de Go Long, implementação da API de auto-sum
usando uma ISQL e vamos lá. Continuando aqui, eu vou tirar a Sprint LN na linha 47 e vou tirar a
Sprint LN da linha 54 e também aqueles lá que configurar banco de dados embaixo aqui. Linha.
Linhas 204 e 5. Vamos lá de volta para o listar livros.
Depois, quando não tiver erro, depois da query, vamos ter que fazer um loop, uma repetição aqui para
poder ler, fazer leitura dos resultados desses registros. A função que vai vir dos registros aqui vai ser o scan.
Scan para escanear. Então vai ser o seguinte. Olha aqui, vamos fazer um for e dos resultados,
dados, registros, tem um método chamado Next que você vai chamar. Bem, quando você chama o Next,
ele vai te dizer se ainda tem algo para ler. Se tiver algo, vai ser verdadeiro e, portanto, vai executar a repetição.
Na repetição, vamos fazer o seguinte. Vamos declarar uma variável para armazenar o livro.
Vamos dar o livro do tipo livro. A gente já tinha lá em cima, se você lembra? Type livro.
É uma estrutura que tem três propriedades de título e autor.
Bem, temos esse livro declarado mais cadeias propriedades. Bem, as propriedades bancas vão vir do banco de dados.
Dos registros, vamos chamar o scan. O scan vai levar um número de argumentos variado.
Isto é, conta aqui quantas colunas você selecionou. No meu caso, uma, duas, três colunas lá do select.
Portanto, o meu scan vai ser três argumentos.
Então, eu vou passar o endereço do livro.id.
%leave.autor. Note a correspondência. O id é o primeiro, autor é o segundo.
E, finalmente, o livro.title com a % antes. Terceiro.
Com isso, o scan vai retornar.
Se der tudo certo, ele vai pegar e vai modificar o valor de livro.
Vou entender com o autor e título com o resultado da linha da consulta.
Se der problema, essa chamada retorna um erro. Eu falar erro diz scan.
2 pontos igual. 2 pontos igual que não vai ter problema, né?
Então, veja que eu fiz um...
Comenti um erro anteriormente, o 2 pontos igual na hora de definir o DB, né? Quando eu abri.
Mas, nesse caso, está certo.
Vamos checar aqui.
Não sei se é parênteses, não.
Tina, o erro não for news, tu é. Houve um erro.
Vamos fazer o quê? Bem, nós fizemos a query e não teve problema.
Mas, na hora de dar scan, aí que deu problema.
Então, quem é ocupado aqui? Bem, talvez seja o servidor.
Então, eu vou dizer log println, listar livros.
Erro de scan. 2 pontos e erro de scan.error.
Para mostrar mensagem. Eu vou logar o erro, mensagem de erro e vou fazer a mesma coisa, mesmo, né?
Ou até... Bem, você poderia também mandar o código 500, internal server error.
Erro de servidor interno.
Ou você poderia apenas ignorar o registro e ir para o próximo, para a próxima repetição do for.
Depende de como você quer fazer isso.
Se eu fosse para ignorar o registro, aí no final, esse cara que não ia aparecer no resultado do API.
Talvez seja legal, em vez de retornar 500, só retornar o usuário possivelmente.
Uma lista vazia ou uma lista com os outros recordes, se somente esse recorde der problema.
E os outros não der. Então, fazer isso, só dizer.
Para poder ir para a próxima repetição, como é? Continue.
Normalmente, nas linguagens, são continue. Então, vamos ver.
E... Depois disso, o continue vai ir para o próximo, uma repetição.
E se não ver, vamos continuar aqui.
Depois de entrar, acho que esse erro se puder.
Depois disso, se não tiver erro, isso significa que o livro vai estar com os dados.
Mas, a gente quer retornar todos os livros.
Então, a gente vai precisar de uma fatia de livros aqui.
Então, vamos criar aqui em cima, vá livros no plural do tipo fatia-livro.
Aí eu vou definir usando uma fatia de comprimento zero.
Vou usar make, qual é o tipo fatia-livro, qual é o comprimento zero.
Que aí não tem nenhum vazia, né?
Importante isso, tá? Essa parte.
Aí, o que é que eu vou fazer aqui?
Eu vou apender o livro que foi lido, escaneado, na lista de livros.
Bem, a lista de livros tem que atualizar, então vou colocar livro igual a append.
Livro a livros.
Isso vai ser a lista que estava assim, inicialmente.
E eu pegasse um novo livro, iria pegar a lista, adicionar.
E essa nova lista aqui, eu iria armazenar na livros.
A livra de, sei lá, livro 1.
E assim por diante.
Ops.
A append adiciona a coisa no final da lista.
Tá bom?
Depois disso, então aqui, os livros aqui que você está retornando,
na verdade, vão ser esses livros aqui que a gente fez.
Essa é a nova variável.
Então, vou modificar o L mais ou menos,
que não vai usar mais aquela variável do escopo global no modo.
Tem também uma etapa de fechar a query.
Se você ver aqui no documentação,
KG,
query, data base, SQL, index,
cabel query do DB, query, query retorno esse,
DB, query, bombê.
Se você quisesse também fechar a conexão naquela hora,
aqui,
nos KD, rows, close.
Aqui, esse que eu queria achar.
Então, era o close do rows.
Close, fecha os registros.
Next, chamados, ok.
Se o next, você chamar o next,
e o next retornar false e não ter mais conjuntos,
as registros são fechadas automaticamente.
E você só precisa checar o resultado de erro.
Então, esse detalhes,
ele tem que você não precisa checar,
depois do repetição,
só precisa checar o erro.
Não é eu vou fazer isso, ver.
Ok, vamos lá.
Depois de os registros, ponto, close, para fechar,
aí, isso retorna o que é o erro, não é, se lembra?
Error.
Error de fechar registros.
Esse deve de novo, sei lá,
checa de novo, se não for nele,
ah, o que é que eu vou fazer nesse caso?
Esquisará o println, log println,
tá ali os erro, fechar registros.
Mais, se fechar registros, ponto, error.
Só fazer isso mesmo, não vou mandar na arpousuária,
ele não precisa saber disso,
só precisa receber o livro.
Então, só log interno mesmo.
Finalmente, vamos testar isso.
Controu o C, vai iniciar o servidor,
poderia usar o compiler de,
né, nesse caso já.
Será que eu inverti?
Ah, meu Deus, eu inverti o apen.
É o contrário, né?
Ah, vamos ver aqui.
Isso que dá, sabe muito a linguagem,
eu te esquece dos argumentos para a ordem.
Se eu esquecer,
deixa eu ver aqui, built in, append.
Ah, então o append primeiro é o slice,
a fatia que a gente quer adicionar.
Desculpe, então.
Então primeiro vai ser o slice,
e o que vai ver os itens individualmente.
Nesse caso, só tem um livro.
Tá, então esse detalhe, primeiro é o slice.
Primeiro é o slice.
Vamos lá de novo, vamos usar o compiler de,
né, compilera,
daemon,
traço build, igual o go install,
traço command,
do langa, api, gsacro, etc.
Ah,
isso está acontecendo porque eu tenho que criar tabela
no mesmo direitório que o meu
main.go, e ambos têm a função main
declarada, então tem esse problema.
Para poder consertar isso, teria que fazer
mudar aqui,
isso para outra coisa aqui, ou mudar de,
para auto-package,
ter que lidar com o negócio de modules,
go modules,
mas a gente não vai ter muito tempo para isso,
então eu vou deixar no go run mesmo,
desculpa.
Era esse detalhe, por isso que eu não usei o compilera daemon.
Vamos lá.
Então, 200 OK.
Será que realmente veio lá do
mysgl?
Deixa eu ver no meu,
fazer uma detração aqui no meu cliente.
Eu tenho select start from,
vou fazer
insert into
beerus
values
auto-titul
alguém aqui
um titular go.
OK.
Adicionou aqui esse novo registro.
Vamos ver se apareceu aqui quando deu o send.
Realmente apareceu.
Então está vindo do banco de dados mesmo.
Está bom?
Até por essa aula só e até a próxima.
Tchau.