【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范

【Go-Zero】测试API查询信息无法返回数据库信息与api、rpc文件编写规范

大家好 我是寸铁👊
总结了一篇测试API查询信息无法返回数据库信息与api、rpc文件编写规范的文章✨
喜欢的小伙伴可以点点关注 💝

问题背景

大家好,我是寸铁!今天在今天在编写gozeroapirpc时,出现了个小bug,下面我们一起来看一下这个bug是什么?


今天在编写gozeroapirpc进行测试的时候,想要通过id去调数据库的数据。
测试结果如下:
很明显,并没有成功拿到数据库的数据。

在这里插入图片描述


数据库是有对应数据的。

在这里插入图片描述

排查问题

可以从rpcapi层的代码中打印到数据库的数据,说明编写逻辑是没问题的。

rpc层打印信息如下:
在这里插入图片描述


api层打印信息如下:

在这里插入图片描述

编写apirpc层的逻辑赋值常用copier.Copy(resp , res)函数。
但是在这一处copier.Copy(resp , res)时候发现resp打印内容是db设置的默认值,这就说明调用这个函数时,无法成功赋值!

那为什么赋值不成功呢?

我们先来看一下函数的底层结构是怎么样的?

进入函数的表层,发现主要是传入两个参数。

一个是要目标数据(你想赋值的位置),一个是数据来源(你要赋值的数据),这两个都是接口类型,说明可以传入任意类型的参数。

在这里插入图片描述


再进入copier函数的底层封装实现看看:

本质是基于反射实现的,对数据的各种类型和数值进行处理。
由于篇幅过长,感兴趣的同学可以去阅读源码

在这里插入图片描述


在这里插入图片描述
好,到了这里我们需要思考一个问题,很明显是调用Copy函数赋值不成功,那么这里就需要对传入的参数进行思考。

  • 到底是参数传反了?
  • 还是说传入的参数不对?
  • 还是说传入的参数结构有要求?

回头看看这个函数,逐个对猜想进行排查。

在这里插入图片描述

排查如下:

  • 第一种,位置不对,这里的res是从数据库查到的数据,再把他赋值给resp响应,这是没问题的

  • 第二种,res是我从数据库查到的数据,resp是赋值的响应信息,这两部分都是结构体,并且语法也通过了,这也是没问题的。

  • 第三种,传入的参数的结构对不上,或者说错乱
    在排查了前两种可能性后,只有第三种的概率比较大。

再使用一下参数,发现还能够通过res点出Goods,这说明之前编写的rpc层的proto文件和api层的api文件的编写结构不一致或者说嵌 套了导致调用的混乱

在这里插入图片描述

那就需要重新回到一开始的rpc层的proto文件和api层的api文件编写上了!


解决问题

这里是根据id查询数据库的信息,不需要再套多一层。

主要是最开始的protoapi文件的编写问题,不要再套多一层,直接就是返回需要返回的信息即可。


proto文件如下编写为正确规范:

在这里插入图片描述


api文件编写正确规范如下:

在这里插入图片描述

如下编写错误,这里不要再套多一层!!!

在这里插入图片描述


修改完文件后,重新用goctl重新生成apirpc层代码

resp的内容如下:

在这里插入图片描述

res的内容如下:

在这里插入图片描述

重新测试

重启服务后,测试结果如下:

在这里插入图片描述

这样就成功拿到信息啦!

总结回顾

  • 如果只是返回根据id查询单个的信息,不要套一层结构体,直接把商品的信息返回出去,不要再套一层,否则在后面的copier函数很混乱,导致结构体赋值失败

  • 如果要返回查询的信息的列表时,可以选择嵌套多一层。

注意:编写文件的规范取决于你的需求生产环境,使用时可以适当参考本文编写规范。


往期好文💕

保姆级教程

【保姆级教程】Windows11下go-zero的etcd安装与初步使用

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero

【Go-Zero】手把手带你在goland中创建api文件并设置高亮


报错解决

【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项

【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

【Go-Zero】【error】 failed to initialize database, got error Error 1045 (28000):报错解决方案

【Go-Zero】Error 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)报错解决方案

【Go-Zero】type mismatch for field “Auth.AccessSecret“, expect “string“, actual “number“报错解决方案

【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案

【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案


Go面试向

【Go面试向】defer与time.sleep初探

【Go面试向】defer与return的执行顺序初探

【Go面试向】Go程序的执行顺序

【Go面试向】rune和byte类型的认识与使用

【Go面试向】实现map稳定的有序遍历的方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/495922.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:IP

引言: IP协议是互联网协议族中的核心协议之一,负责为数据包在网络中传输提供路由寻址。它定义了数据包如何在互联网上从源地址传输到目的地址的规则和流程。IP协议使得各种不同类型的网络设备能够相互通信,实现了全球范围内的信息交换。 目录…

环境分析检测小剂量移液用耐受硝酸盐酸PFA材质吸管特氟龙移液枪枪头

PFA枪头,为移液枪专业定制,广泛用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验室。地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等一些机构少量移液用。 规格参考:0.1-0.2ml、1ml、2ml、5ml、10ml等。 目前部分规格可适配普…

数仓项目6.0(二)数仓

中间的几步意义就在于,缓存中间处理数据样式,避免重复计算浪费算力 分层 ODS(Operate Data Store) Spark计算过程中,存在shuffle的操作,而shuffle会将计算过程一分为二,前一阶段不执行完&…

深度学习 精选笔记(4)线性神经网络-交叉熵回归与Softmax 回归

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

red hat 6.9版本7.9版本 忘记root密码重置方法

文章目录 1、重置密码具体步骤Oracle Linux 6.9版本:1、开机到此界面按e2、在以下界面选择后按e3、选择相应内核后按e4、在此界面输入 single 回车5、回到内核界面后按b进入引导系统6、在#后输入passwd root修改密码7、修改密码:8、Reboot重启9、使用新密…

基于springboot+vue的企业人事管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【初中生讲机器学习】12. 似然函数和极大似然估计:原理、应用与代码实现

创建时间:2024-02-23 最后编辑时间:2024-02-24 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名初三学生,热爱计算机和数学,我们一起加…

css常用的选择器介绍

CSS(层叠样式表)选择器是CSS规则的一部分,它用于选择和定位网页上的元素,以便将样式应用到这些元素上。CSS选择器的种类繁多,每种选择器都有其特定的用途、特点和效率。在这篇文章中,我们将讨论一些常用的C…

leetcode:134.加油站

解题思路:需要注意开始时的编号,有的可以走一圈,有的走不了 模拟过程:for循环主要是用来模拟线性的过程,而在这里它是环状的; 可以用暴力解法,但是在这里我用贪心来解决。 常见疑惑&#xff1…

行为树入门:BehaviorTree.CPP Groot2练习(叶子节点)(2)

以《行为树BehaviorTree学习记录1_基本概念》练习。 1 SequenceNode顺序控制节点 代码下载 git clone https://gitee.com/Luweizhiyuan2020/ros2_bt.git例程 1.1 sequence 顺序执行 下载版本SequenceNode1。 1.2 ReactiveSequence 异步执行 注意: ①only a…

LeetCode 刷题 [C++] 第141题.环形链表

题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

安全防御-第六次

内容安全 攻击可能只是一个点,防御需要全方面进行 DFI和DPI技术--- 深度检测技术 DPI --- 深度包检测技术--- 主要针对完整的数据包(数据包分片,分段需要重组),之后对数据包的内容进行识别。(应用层&…