Go Zero微服务个人探究之路(十)实战走通微服务前台请求调用的一套流程model->rpc微服务->apiHTTP调用

前言

Go语言凭借低占用,高并发等优秀特性成为后台编程语言的新星,GoZero框架由七牛云技术副总裁团队编写,目前已经成为Go微服务框架里star数量最多的框架

本文记录讲述笔者一步步走通前台向后台发出请求,后台api调用rpc服务的相关方法,然后执行代码返回结果,再由api返回结果给前台的过程,具体采用restful风格请求,内容上还包括了对数据库进行goctl代码生成以及自定义方法编写

本文侧重于rpc,api部分,前面部分内容附上了我的博客链接,内有详细解释,本文将精简掠过

目的

实现前台从后台获取公告内容

流程

建表

对于建表没有太多要说的,只需要注意我这篇文章提到的

GoZero的一个注意点,goctl生成代码不会处理时间字段-CSDN博客

goctl生成的model代码处理时间字段或者是时间格式字段的代码同其他字段有些区别,最简单的实践是让数据库控制insert update时间

goctl生成model代码

goctl是go-zero框架的重要工具,可以直接从数据库生成model代码

model代码包含了基本的一张表的增删改查方法,同时提供了方法让我们自己定义方法

具体内容可以看我写的这篇文章

GoZero微服务个人探究之路(八)-[mysql数据库]如何拓展由goctl生成的model代码里的方法-CSDN博客

编写proto文件

proto文件是go-zero生成rpc代码的重要文件,内有对请求request,response的定义,以及服务,请求方法定义,语法遵循谷歌proto3语法

同时也有一些坑,可以参照我的这篇博客

GoZero goctl报错“google.protobuf.Timestamp“ is not defined.以及google/protobuf/empty.proto无法导入(proto3)-CSDN博客

节省篇幅,我们主要讲述走通获取全部公告需要做什么

如上,我们定义好了请求结构,请求的response结构,并把get所有公告这一方法分组在service内

之后,我们需要用goctl生成代码

rpc代码完善

接下来第一件事,为我们的微服务的svcContext内添加model的引用,

这样我们就可以在logic代码内调用我们自定义的,或者是goctl生成的增删改查代码,并构建结果返回

之后我们还需要在启动文件内,main文件,注册好我们proto文件定义的服务

至此rpc的流程结束

api代码完善,和rpc衔接

首先我们要定义api文件,这是go-zero特有的文件,goctl通过这个文件来生成代码

api文件代码编写可以遵循这篇博客

GoZero微服务个人探究之路(九)api文件编写总结-CSDN博客

同样的,我们构造好请求request结构,reponse结构,并且定义请求路径以及handler,并分配到service内

之后我们采用goctl生成代码

然后我们需要在serviceContext内补充我们刚刚写好的服务:

1.在结构体内新增service条目  2.在NewServiceContext返回实例内实例化service

和在rpc内增加对model的引用类似

之后我们需要对logic包内代码编写,具体需要在类似这个函数内补充代码

调用我们前面rpc的service已经定义好了的方法,然后构造HTTP请求结果返回

一般来说,goctl生成的handler代码无需再次修改,但也可以选择添加自己的一些逻辑

至此整套流程衔接跑通

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

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

相关文章

VR数字展厅,平面静态跨越到3D立体化时代

近些年,VR的概念被越来越多的人提起,较为常见的形式就是VR数字展厅。VR数字展厅的出现,让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新,同时也意味着展览传播的方式不再局限于原来的图文、视频,而是…

【Redis】list以及他的应用场景

介绍 :list 即是 链表。链表是一种非常常见的数据结构,特点是易于数据元素的插入和删除并且且可以灵活调整链表长度,但是链表的随机访问困难。许多高级编程语言都内置了链表的实现比如 Java 中的 LinkedList,但是 C 语言并没有实现…

Spring Boot如何统计一个Bean中方法的调用次数

目录 实现思路 前置条件 实现步骤 首先我们先自定义一个注解 接下来定义一个切面 需要统计方法上使用该注解 测试 实现思路 通过AOP即可实现,通过AOP对Bean进行代理,在每次执行方法前或者后进行几次计数统计。这个主要就是考虑好如何避免并发情况…

JavaScript Proxy 对象、eval函数详解

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 Proxy 什么是 Proxy 代理 handlers get 捕获器 se…

Oracle ORA-09925

Error : 30: Read-only file system 造成这个问题的原因大多数是因为非正常关机后导致文件系统受损引起的,在系统重启之后,受损分区就会被Linux自动挂载为只读。 解决办法之一: 重启系统

聚观早报 | 特斯拉公布2023年财报;五菱红1号电池正式发布

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 1月26日消息 特斯拉公布2023年财报 五菱红1号电池正式发布 Redmi Note 13 Pro新春版开售 三星Galaxy S24系列发布…

HCIA——29HTTP、万维网、HTML、PPP、ICMP;万维网的工作过程;HTTP 的特点HTTP 的报文结构的选择、解答

学习目标: 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议,了解典型网络设备的组成和特点,理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

在windows上用python版tensorrt推理

文章目录 尝试一:利用torch导出的pth文件,调用torch2trt来进行trt推理1.1 搭建环境1.2 如何trt推理1.3 遇到的问题 尝试二:把onnx模型转为sim版的onnx模型2.1 搭建onnxim环境2.2 使用 onnxsim 尝试三:把onnx-sim转到trt&#xff0…

Python之代码覆盖率框架coverage使用介绍

Python代码覆盖率工具coverage.py其实是一个第三方的包,同时支持Python2和Python3版本。 安装也非常简单,直接运行: pip install coverage 安装完成后,会在Python环境下的\Scripts下看到coverage.exe; 首先我们编写…

【LIBS】交叉编译TCPDUMP

目录 1. 安装编译工具2. 设置环境变量3. 编译libpcap3.1 安装依赖3.2 交叉编译 4. 编译TCPDUMP4.1 克隆仓库与生成构建环境4.2 静态链接LIBPCAP4.3 动态链接LIBPCAP4.4 构建与安装 5. 查看交叉编译结果5.1 文件布局 1. 安装编译工具 sudo apt-get install -y autoconf automak…

架构篇25:高可用存储架构-双机架构

文章目录 主备复制主从复制双机切换主主复制小结存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考…

爬取第一试卷网高三数学试卷并下载到本地

import requests import re import os filename 试卷\\ if not os.path.exists(filename):os.mkdir(filename) url https://www.shijuan1.com/a/sjsxg3/list_727_1.html headers {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.…

第二百八十七回

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用…

DDOS攻击有哪几种类型

DDOS攻击“分布式拒绝服务”是目前网站服务器所常见的恶意攻击,其原理是通过控制大量肉鸡(虚假流量)访问网站服务器消耗带宽、内存等资源,其目的是使得网站服务器无法正常的访问,其后果是直接导致企业业务受损,数据丢失&#xff0…

Android开发修炼之路——(一)Android App开发基础-3

本专栏文章: Android开发修炼之路——(一)Android App开发基础-1 Android开发修炼之路——(一)Android App开发基础-2 3 App的设计规范 本节介绍了App工程的源码设计规范,首先App将看得见的界面设计与看不…

eNSP学习——交换机基础

目录 原理概述 实验目的 实验步骤 实验内容 实验拓扑 实验步骤 基础配置 配置交换机双工模式 配置接口速率 思考题 原理概述 交换机之间通过以太网电接口对接时需要协商一些接口参数,比如速率、双工模式等。   接口速率:指的是交换机接口每秒钟传…

【Go 快速入门】安装 Go 语言 | 开发工具 Goland | 第一个 Go 语言程序

文章目录 前言安装 Go 语言编译器 Goland运行 Go 程序补充 前言 本系列教程,目的是帮助一个有其他编程基础的 Go 语言小白快速入门 Go 语言,而非启发式学习。每篇幅保证不说废话,尽可能精炼总结,为上手后续的 Go 相关项目打下基础…

基于物联网设计的水稻田智能灌溉系统(STM32+华为云IOT)

一、项目介绍 随着科技的不断发展和人们生活水平的提高,农业生产也逐渐向智能化、高效化的方向发展。水稻作为我国主要的粮食作物之一,其生长过程中的灌溉管理尤为重要。传统的灌溉方式往往依赖于人工观察和控制,不仅效率低下,而…

搜索与图论第五期 拓扑序列

前言 拓扑排序是非常重要的一部分,希望大家都能够手撕代码!!!(嘿嘿嘿) 一、拓扑排序定义(百度须知嘿嘿嘿) 拓扑排序 拓扑排序是一种对有向无环图(Directed Acyclic Gra…

flink学习之窗口处理函数

窗口处理函数 什么是窗口处理函数 Flink 本身提供了多层 API,DataStream API 只是中间的一环,在更底层,我们可以不定义任何具体的算子(比如 map(),filter(),或者 window()),而只是…