GoZero微服务个人探索之路(三)Go-Zero官方rpc demo示例探究
官方网址:https://go-zero.dev/docs/tasks/cli/grpc-demo
项目结构

demo包
两个文件均为protoc-gen-go-grpc自动生成
构成一个完整的 gRPC 服务的定义和实现
democlient包
demo.go goctl生成的客户端代码

- Request 和 Response 别名: 定义了 Request 和 Response 两个别名,实际上是从 demo 包中导入的对应的消息类型。
- Demo 接口: 定义了一个 Demo 接口,其中包含了调用 gRPC 服务中 Ping 方法的方法声明。
- defaultDemo 结构体: 实现了 Demo 接口,包含一个 zrpc.Client 类型的字段,用于与 gRPC 服务建立连接。
- NewDemo 函数: 用于创建并返回 Demo 接口的实例,需要传入一个 zrpc.Client 类型的参数,用于建立连接。
- Ping 方法: 是 Demo 接口中的实际方法,通过 defaultDemo 结构体的实例调用 gRPC 服务中的 Ping 方法。
etc包
demo.yaml

- Name:demo.rpc 服务名称
- ListenOn:0.0.0.0:8080 指定服务监听的地址和端口
- Mode:dev 服务运行在开发模式 (dev)
internal包
config/config.go

zrpc结构体源码如下
logic/pinglogic.go

- **PingLogic 结构体:**包含了处理 gRPC 请求的上下文、服务上下文以及日志记录器
- NewPingLogic 函数: 创建并返回 PingLogic 结构体的实例,初始化了上下文和服务上下文,并通过 logx.WithContext 方法创建了与上下文关联的日志记录器
- Ping 方法: 是处理 gRPC 请求的具体逻辑方法。接收一个 demo.Request 类型的参数 in,并返回一个 *demo.Response 类型和一个 error
server/demoserver.go 由goctl生成的grpc服务端代码

- DemoServer 结构体: 实现 demo.UnimplementedDemoServer 接口,表示该结构体用于处理 gRPC 请求,包含了一个 svcCtx 字段–指向 svc.ServiceContext 结构体的指针
- NewDemoServer 函数: 用于创建并返回 DemoServer 结构体的实例
- Ping 方法: 是 DemoServer 处理 gRPC 请求的具体方法。它接收一个上下文 ctx 和一个 demo.Request 类型的参数 in,并返回一个 *demo.Response 类型和一个 error。在这个方法中,它创建了一个 logic.NewPingLogic 实例,然后调用了 l.Ping(in) 方法,将请求交由具体的业务逻辑处理。
svc/servicecontext.go

创建返回svc结构体实例
demo.proto

用于生成不同语言的gRPC代码
- syntax = “proto3”;: 指定使用 protobuf 3 语法
- package demo;: 指定生成的 Go 代码的包路径
- option go_package=“./demo”;: 指定生成的 Go 代码的包路径
- message Request: 定义了一个消息类型 Request,其中包含一个字符串字段 ping
- message Response: 定义了一个消息类型 Response,其中包含一个字符串字段 pong
- service Demo: 定义了一个服务接口 Demo,包含一个 Ping 方法,该方法接收 Request 消息作为参数,并返回 Response 消息
— string pong = 1; 不代表值为1,代表他的编号为1(protobuf语法
demo.go

- 加载配置文件: 使用 flag 包解析命令行参数,获取配置文件路径,并通过 conf.MustLoad 加载配置信息到结构体 c 中
- 创建服务上下文: 使用 svc.NewServiceContext 创建服务上下文,将配置信息传递给服务上下文
- 创建 gRPC 服务: 使用 zrpc.MustNewServer 创建 gRPC 服务,同时注册了 Demo 服务。如果是开发或测试模式,还注册了 gRPC 服务反射服务,以方便 gRPC 工具的使用
- 启动 gRPC 服务: 使用 s.Start() 启动 gRPC 服务,监听指定的地址
启动


相关文章:
GoZero微服务个人探索之路(三)Go-Zero官方rpc demo示例探究
官方网址:https://go-zero.dev/docs/tasks/cli/grpc-demo 项目结构 demo包 两个文件均为protoc-gen-go-grpc自动生成构成一个完整的 gRPC 服务的定义和实现 democlient包 demo.go goctl生成的客户端代码 Request 和 Response 别名: 定义了 Request 和…...
1月下半笔记(个人向)
最近才开始看d2l(这种东西早该在两年前看的,拖到现在了) 为了做项目还得学一手OpenGL(被windows安装GLFW逼疯了) 1.15 打完ICPC EC final回来,也许可以出一篇博客写下简单的题解。 对蛋白质相似空间子结…...
ChatGpt使用技巧
通用类技巧 角色扮演 比如让ChatGpt扮演500强营销专家 告诉ChatGpt你的身份。初学者、或是有一定能力、知识的学习者等 限制ChatGpt回答长度 100~200字之间 让ChatGpt一步一步思考 他会预测下一个单词,根据prompt进行生成 明确你的要求和目的 说清楚问题&#x…...
自动安装解压版mysql8的脚本
由于mysql 8的 MSI 安装包,自动把程序安装到了C盘,且没看到有可以更改安装位置的配置可以修改。 故自行写了一个脚本,用来安装mysql 8的压缩包。可以将 mysql 8 以及其 Data目录 安装到C盘以外的位置。第一次写 bat 脚本,希望各位…...
第二讲_HarmonyOS应用创建和运行
HarmonyOS应用创建和运行 1. 创建一个HarmonyOS应用2. 运行新项目2.1 创建本地模拟器2.2 启动本地模拟器2.3 在本地模拟器运行项目 1. 创建一个HarmonyOS应用 打开DevEco Studio,在欢迎页单击Create Project,创建一个新工程。 选择创建Application应用。…...
Android车载系统Car模块架构链路分析
一、模块主要成员 CarServiceHelperService SystemServer 中专门为 AAOS 设立的系统服务,用来管理车机的核心服务 CarService。该系统服务的具体实现在 CarServiceHelperServiceUpdatableImpl CarService Car模块核心服务APP,Android 13版本开始分为…...
C语言经典算法之顺序查找算法
目录 前言 A.建议 B.简介 一 代码实现 二 算法时空复杂度 A.时间复杂度: B.空间复杂度: 三 优点和缺点 A.优点: B.缺点: 四 现实中的应用 前言 A.建议 1.学习算法最重要的是理解算法的每一步,而不是记住算…...
c语言嵌套循环
c语言嵌套循环 c语言嵌套循环 c语言嵌套循环一、c语言嵌套循环格式二、嵌套循环案例九九惩罚口诀 一、c语言嵌套循环格式 for(初始值;表达式;表达式) {for(初始值;表达式;表达式){代码} }int main() {for (…...
磁盘位置不可用怎么修复?
磁盘位置不可用是计算机使用中经常遇到的问题。造成磁盘位置不可用的原因有多种,其中最常见的是磁盘文件系统损坏。当文件系统损坏时,操作系统无法正常访问磁盘上的数据,导致磁盘位置不可用。 磁盘位置不可用怎么修复? 当磁盘位置…...
【总结】Linux命令中文帮助手册
1. 为什么要总结Linux命令中文帮助手册 Linux 官方并不提供中文的 help、man 帮助手册。网络上已有的前人翻译过的中文手册版本比较老,且翻译存在误差。从记忆角度来看,Linux 很多命令都不一定记得住详细的用法,易遗忘,缺少经验总…...
[贪心算法] 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大…...
meter报OOM错误,如何解决?
根据在之前的压测过程碰到的问题,今天稍微总结总结,以后方便自己查找。 一、单台Mac进行压测时候,压测客户端Jmeter启动超过2000个线程,Jmeter报OOM错误,如何解决? 解答:单台Mac配置内存为8G&…...
第二百六十九回
文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容,本章回中将介绍国际化设置.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作,这样可以让不同国家的…...
未来能源转型之路:2023年第十三届中国国际储能大会启示录
在2023年第十三届中国国际储能大会上,全球各地的能源专家、学者和企业代表齐聚一堂,共同探讨了储能技术在推动能源转型中的重要作用。对于我们普通人来说,从这场大会中可以学到什么呢? 一、储能技术是未来能源发展的关键 随着可再…...
rviz可视化机械臂(python)
一、准备的东西 一个机械臂的urdf 规划的路径点 二、launch文件的撰写 1.初始化 <?xml version"1.0" encoding"utf-8"?> <launch><param name"robot_description" textfile"机械臂.urdf" /><node name&qu…...
《设计模式的艺术》笔记 - 享元模式
介绍 享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式ÿ…...
ubuntu系统(10):使用samba共享linux主机中文件
目录 一、samba安装步骤 1、Linux主机端操作 (1)安装sabma (2)修改samba配置文件 (3)为user_name用户设置samba访问的密码 (4)重启samba服务 2、Windows端 二、使用 1、代码…...
数据集成时表模型同步方法解析
01 背景介绍 数据治理的第一步,也是数据中台的一个基础功能 — 即将来自各类业务数据源的数据,同步集成至中台 ODS 层。业务数据源多种多样,单单可能涉及到的主流关系型数据库就有近十种。功能更加全面的数据中台通常还具有对接非关系型数据…...
彻底解决charles抓包https乱码的问题
最近做js逆向,听说charles比浏览器抓包更好用,结果发现全是乱码,根本没法用。 然后查询网上水文:全部都是装证书,根本没用! 最后终于找到解决办法,在这里记录一下: 乱码的根本原因…...
Towards Robust Blind Face Restoration with Codebook Lookup Transformer
Towards Real World Blind Face Restoration with Generative Facial Prior 这个projec相对codeformer已经是老一些的了,CodeFormer paper说自己的效果比这个更好。 有看了这个视频,它借用了R-ESRGAN 4x 和 GFPGAN 50%,既保留了一些人物特征…...
GRF (1-43) (rat)
一、基础信息中文名称:大鼠生长激素释放因子 (1-43)英文名称:Growth Hormone-Releasing Factor (1-43), rat三字母序列:His-Ala-Asp-Ala-Ile-Phe-Thr-Ser-Ser-Tyr-Arg-Arg-Ile-Leu-Gly-Gln-Leu-Tyr-Ala-Arg-Lys-Leu-Leu-His-Glu-Ile-Met-Asn-…...
SSHFS-Win:如何让Windows像访问本地硬盘一样操作远程Linux文件
SSHFS-Win:如何让Windows像访问本地硬盘一样操作远程Linux文件 【免费下载链接】sshfs-win SSHFS For Windows 项目地址: https://gitcode.com/gh_mirrors/ss/sshfs-win 对于需要在Windows环境下工作的开发者来说,最头疼的问题之一就是如何高效访…...
python代码编译成库
一、项目结构如下:your_project/ ├── match/ │ ├── __init__.py # 空文件,声明为包 │ └── matcher.py # 包含 compete_image 类 ├── stitch/ │ ├── __init__.py # 空文件,声明为包 │ └── total…...
紧急更新!Midjourney v6.6对洛可可风格支持突降37%?立即启用这5个兼容性补丁prompt,保住你的商业项目交付期
更多请点击: https://intelliparadigm.com 第一章:Midjourney v6.6洛可可风格兼容性危机全景速览 Midjourney v6.6 发布后,大量用户在生成洛可可(Rococo)风格图像时遭遇显著退化:繁复卷曲的藤蔓纹样被简化…...
3分钟搞定M3U8视频下载:N_m3u8DL-CLI-SimpleG完整指南
3分钟搞定M3U8视频下载:N_m3u8DL-CLI-SimpleG完整指南 【免费下载链接】N_m3u8DL-CLI-SimpleG N_m3u8DL-CLIs simple GUI 项目地址: https://gitcode.com/gh_mirrors/nm3/N_m3u8DL-CLI-SimpleG 还在为无法下载在线视频而烦恼吗?想保存喜欢的教学视…...
如何5分钟部署小鹿快传:零基础P2P文件传输终极指南
如何5分钟部署小鹿快传:零基础P2P文件传输终极指南 【免费下载链接】deershare 小鹿快传,一款在线P2P文件传输工具,使用WebSocket WebRTC技术 项目地址: https://gitcode.com/gh_mirrors/de/deershare 小鹿快传(DeerShare…...
BilibiliDown音频提取终极指南:3种方法从B站视频提取高质量音乐
BilibiliDown音频提取终极指南:3种方法从B站视频提取高质量音乐 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_…...
论文被吐槽逻辑乱?,有哪些真正值得入手的的AI智能降重工具推荐?
毕业论文降AIGC率,优先选语义重构 学术优化 去AI痕迹的工具,免费与付费结合更高效。下面按中文、英文、免费/付费分类推荐,附实测效果与适用场景。 一、中文论文降重工具(最常用) 1. 千笔AI(综合全能首选…...
从欧氏距离到余弦相似度:5种距离度量如何影响你的KNN模型?用Scikit-learn实战对比
从欧氏距离到余弦相似度:5种距离度量如何影响你的KNN模型?用Scikit-learn实战对比 在机器学习的世界里,K近邻算法(KNN)因其简单直观而广受欢迎。但很多实践者往往只关注k值的选择,却忽略了另一个同等重要的超参数——距离度量。就…...
2026年获客成本飙升?GEO优化让线索成本降低60%
2026年获客成本飙升?GEO优化让线索成本降低60% 摘要 :传统获客方式成本越来越高,百度竞价按点击付费,展会一次花费数万,线索成本难以下降。本文介绍一种新的获客方式——GEO优化,通过AI搜索优化直接触达目标…...
