Estou desenvolvendo com Couchbase e o Go SDK há algum tempo, mas recentemente me deparei com um problema que considerei ser um bug no SDK após horas de solução de problemas. Eu estava tentando executar uma consulta N1QL que, de fato, tinha resultados. O problema era que eu não estava vendo nenhum desses resultados no aplicativo Go.

Depois de resolver o problema com o engenheiro do Go SDK, não se tratava de um bug, mas, na verdade, de alguns erros do usuário. Que constrangedor, não é?

Veremos o que eu estava fazendo de errado e as etapas que foram usadas para corrigir o problema.

No meu aplicativo Go, eu tinha várias estruturas de dados que deveriam ser modeladas de acordo com os dados que eu estava armazenando no Couchbase. Uma dessas estruturas de dados era parecida com a seguinte:

Acima está uma estrutura de dados muito simples que representa um modelo de documento muito simples.

Para consultar todos os Blog documentos no meu Bucket do Couchbase, eu estava executando o seguinte código:

Ao executar meu aplicativo, nenhum resultado foi impresso, embora eu pudesse validar em outro lugar que minha consulta estava correta. O Próxima estava sempre retornando falso.

A próxima etapa lógica foi garantir que o Couchbase estivesse recebendo a solicitação corretamente do aplicativo com Go SDK. Isso foi verificado por meio do monitoramento dos logs do Couchbase. Os logs indicaram que tudo estava certo.

Em seguida, alterei um pouco meu código:

Em vez de usar o Próxima usei a função Um função. Um dos resultados foi a impressão, mas não percebi que era uma impressão parcial.

Depois de falar com Brett Lawson, o engenheiro do Go SDK, ele concluiu que eu estava recebendo erros que estavam causando falhas nos resultados.

Mas espere um pouco. O seguinte não imprime meus erros?

O código acima imprimia erros na execução da consulta. Na verdade, eu estava tendo erros em outro lugar, depois que a consulta tinha sido executada e eu tinha recebido os resultados.

Brett recomendou que eu alterasse meu código para o seguinte:

Observe que estou imprimindo o erro no campo Fechar função desta vez.

Acontece que havia erros. O problema era que meus resultados não estavam sendo mapeados corretamente para minha estrutura de dados. Mais especificamente, eu estava tendo um problema com a variável Carimbo de data/hora propriedade.

Eu estava salvando o Carimbo de data/hora como int64 dados, mas eu estava tentando lê-los como se fossem int. Esse pequeno detalhe estava causando um erro que eu não estava detectando, levando-me a acreditar que meus resultados estavam vazios e que havia um bug no Go SDK.

Conclusão

A moral da história aqui é que, se uma função em Go retornar um erro, definitivamente aproveite a informação e faça algo com ela. Não omita o erro de seu código e proceda como se ele não existisse. Isso pode lhe custar horas de frustração no futuro.

Para ver meu tíquete de problema embaraçoso e a resolução adequada, confira o rastreador do Jira aqui.

Para obter mais informações sobre como usar o Go SDK com o Couchbase, consulte a seção Portal do desenvolvedor do Couchbase.

Autor

Postado por Nic Raboy, defensor dos desenvolvedores, Couchbase

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Deixar uma resposta