【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.mzph.cn/news/706750.shtml

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

相关文章

ARM系列 -- 虚拟化(四)

今天来看看虚拟中断。 在一个非虚拟化的系统中,操作系统可以直接访问GIC的寄存器,并且处理GIC的物理中断接口(physical interrupt interface)。 但是在一个虚拟化的系统中,不是这样。Guest OS并不知道它运行在虚拟系…

Apache软件基金会的孵化标准和毕业标准

Apache软件基金会的孵化标准和毕业标准是一个项目成功的重要衡量指标。这些标准关注项目的多个方面,包括开放性、合作性、共建性、透明性、技术可行性、社区建设以及用户基础等。在孵化阶段,Apache软件基金会主要关注项目的开放性和合作性。首先&#xf…

日更【系统架构设计师知识总结2】指令系统(结合真题)

【原创精华】结合老师的讲授、耗费三个小时的精华总结对正在备考的你一定有用!!自己一点点手打、总结的脑图,把散落在课本以及老师讲授的知识点合并汇总,反复提炼语言,形成知识框架。希望能给同样在学习的伙伴一点帮助…

数据结构与算法(数组,栈,队列,链表,哈希表,搜索算法,排序算法,查找算法,策略算法,递归算法,二叉搜索树BST,动态规划算法)

文章目录 1 课程介绍1.1 前置知识1.2 为什么要学习算法1.3 大厂面试常见数据结构题目(基础)1.4 数据结构和算法的关系 2 数据结构2.1 数据结构概述2.1.1 数据结构是什么2.1.2 数据结构分类2.1.2.1 线性结构2.1.2.2 非线性结构2.1.2.3 小总结 2.1.3 数据结构范围 2.2 数组Array2…

八、ChatGPT能替代什么人?

上一讲关于ChatGPT的热炒,其实对于我们来说算是敲了敲警钟。 其实在今天,关于ChatGPT,最多人关注的一个问题就是:ChatGPT能取代人吗,或者说能抢人的饭碗么吗? 有人说不能,也有人说能&#xff08…

前端sql条件拼接js工具

因为项目原因&#xff0c;需要前端写sql&#xff0c;所以弄了一套sql条件拼接的js工具 ​ /*常量 LT : " < ", LE : " < ", GT : " > ", GE : " > ", NE : " ! ", EQ : " ", LIKE : " like &qu…

SpringBoot 拦截器(Interceptor)详解

概念 在Spring Boot中&#xff0c;拦截器是一种用于处理HTTP请求的机制&#xff0c;主要用于执行一些预处理或后处理的逻辑。与AOP不同&#xff0c;拦截器更专注于HTTP请求的处理 拦截器接口 在Spring Boot中&#xff0c;拦截器需要实现HandlerInterceptor接口&#xff01;&a…

【突发】MDPI再出事!23本期刊84篇论文存在“审稿人工厂”问题,4本被中科院预警!

毕业推荐 SCIE&#xff1a; • 计算机类&#xff0c;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区 • 2个月19天录用&#xff0c;6天见刊&#xff0c;36天检索 SCIE&#xff08;CCF-C类&#xff09; • 算法类&#xff0c;2.0-3.0&#xff0c;JCR3区&#xff0c;中科院…

python笔记_格式化输出

%操作符 %s字符串%d整数%.2f浮点数&#xff08;显示小数点后两位&#xff09; 定义 name Tom age 9 score 77.5 输出 print("猫咪信息&#xff1a;%s %d %.2f" % (name,age,score)) ——>猫咪信息&#xff1a;Tom 9 77.50 注意&#xff1a;%操作符指定的类型必…

后台与接口测试demo 查数据

pom 里引入 mybatis 依赖 2.添加 entity 实体类 3.添加 Mapper 添加SQL语句、接口 SpringbootApplicants.Java 添加 RestController接口 标识 SpringbootApplication 是一个接口&#xff0c;可以通过 GetMapping(“/”) 查询所有数据。 GetMapping(“/”) 依赖于 RestCon…

SpringCloud微服务-Eureka注册中心

Eureka注册中心 文章目录 Eureka注册中心前言1、Eureka的作用2、搭建EurekaServer3、服务注册4、启动多个实例5、服务拉取 -实现负载均衡 前言 在服务调用时产生的问题&#xff1a; //2. 利用RestTemplate发起HTTP请求&#xff0c;查询user String url "http://localho…

【力扣hot100】刷题笔记Day15

前言 今天要刷的是图论&#xff0c;还没学过&#xff0c;先看看《代码随想录》这部分的基础 深搜DFS理论基础 深搜三部曲 确认递归函数、参数确认终止条件处理目前搜索节点出发的路径 代码框架 void dfs(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本节点…

DVWA 靶场之 Command Injection(命令执行)middlehigh

对于 middle 难度的 我们直接先看源码 <?phpif( isset( $_POST[ Submit ] ) ) {// Get input$target $_REQUEST[ ip ];// Set blacklist$substitutions array(&& > ,; > ,);// Remove any of the characters in the array (blacklist).$target str_rep…

通过一个栗子来看看创建和运行servlet

通过前面一篇文章的介绍&#xff08;搞着搞着对web project是不是有点迷糊&#xff1f;先关注几个问题-CSDN博客&#xff09;大家对于servlet作为中间层接收请求和反馈响应有了概念上的认知&#xff0c;接下来通过一个栗子来加深一下理解&#xff0c;还是基于前面的jsp项目&…

水电表远程集中抄表管理系统

水电表远程集中抄表管理系统是当前水电行业智能化发展的关键技术之一&#xff0c;为水电企业和用户提供了便捷、高效的抄表管理解决方案。该系统结合了远程监控、自动抄表、数据分析等多种功能&#xff0c;实现了水电抄表的智能化和精准化&#xff0c;为用户节省了大量人力物力…

LeetCode 42 接雨水--单调栈

LeetCode 42 接雨水 在算法和数据结构中&#xff0c;有一类问题被称为“接雨水”问题&#xff0c;它们通常涉及在给定的某种地形&#xff08;通常是表示为数组&#xff09;上模拟雨水下降后的积水情况。其中一个经典的接雨水问题就是给定一个柱状图&#xff0c;计算下雨之后能…

数据库学习案例20240227-数据库连接类故障-ORA-12547: TNS:lost contact

1 操作系统和数据库版本 cat /etc/redhat-release Red Hat Enterprise Linux Server release 6. (Santiago) SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise E…

智慧公厕让社区生活更美好

随着科技的迅猛发展&#xff0c;城市管理、城市服务均使用科技化的手段进行升级改造&#xff0c;社区生活更美好赋予全新的智慧效能&#xff0c;其中智慧公厕也成为了城市环卫设施的新宠。智慧公厕以物联网、互联网、大数据、云计算、5G通信、自动化控制等技术为核心&#xff0…

ConcurrentModificationException并发修改异常

ConcurrentModificationException并发修改异常 原因分析 可以通过遍历索引也可以通过迭代器进行遍历。在我们使用迭代器进行遍历集合的时候&#xff0c;会获取到当前集合的迭代对象。在里面有封装了迭代器的remove方法与集合自带的remove方法&#xff0c;如果我们调用迭代器对…

PowerShell执行策略:确保脚本安全执行的关键

PowerShell执行策略&#xff1a;确保脚本安全执行的关键 在自动化和脚本任务管理中&#xff0c;PowerShell 是 Windows 系统管理员和自动化工程师的强大工具。但随着这种强大的能力也带来了安全风险&#xff0c;特别是在执行未经验证的脚本时。为了降低这种风险&#xff0c;Po…