广州翼讯资讯科技有限公司 网站地方建立网站做SEM

news/2025/9/22 20:12:03/文章来源:
广州翼讯资讯科技有限公司 网站,地方建立网站做SEM,临清网站建设服务,外包加工网是骗人的吗go-zero整合单机版Redis并实现增删改查 本教程基于go-zero微服务入门教程#xff0c;项目工程结构同上一个教程。 go-zero微服务入门教程#xff08;点击进入#xff09; 本教程主要实现go-zero框架整合单机版Redis#xff0c;并暴露接口实现对Redis数据的增删改查。 本…go-zero整合单机版Redis并实现增删改查 本教程基于go-zero微服务入门教程项目工程结构同上一个教程。 go-zero微服务入门教程点击进入 本教程主要实现go-zero框架整合单机版Redis并暴露接口实现对Redis数据的增删改查。 本文源码https://gitee.com/songfayuan/go-zero-demo 教程源码分支2.zero整合单机Redis 准备工作 如不熟悉go-zero项目的请先查看上一篇go-zero微服务入门教程。请自行安装好单机版Redis建议采用docker安装。 rpc新增Redis配置 以下操作在rpc模块执行。 sys.yaml sys.yaml配置文件新增Redis配置信息如下 # Redis配置 RedisConf:Host: 192.168.2.204:6379Type: nodePass: 123456789Tls: falseconfig.go config.go文件中新增RedisConf配置信息如下 RedisConf struct {Host stringType string json:,defaultnode,optionsnode|clusterPass string json:,optionalTls bool json:,optional}servicecontext.go servicecontext.go文件新增Redis配置信息完整代码如下 package svcimport (github.com/zeromicro/go-zero/core/stores/redisgithub.com/zeromicro/go-zero/core/stores/sqlxgo-zero-demo/rpc/model/sysmodelgo-zero-demo/rpc/sys/internal/config )type ServiceContext struct {Config config.ConfigRedisClient *redis.RedisUserModel sysmodel.SysUserModel }func NewServiceContext(c config.Config) *ServiceContext {sqlConn : sqlx.NewMysql(c.Mysql.Datasource)conf : redis.RedisConf{Host: c.RedisConf.Host,Type: c.RedisConf.Type,Pass: c.RedisConf.Pass,Tls: c.RedisConf.Tls,}return ServiceContext{Config: c,RedisClient: redis.MustNewRedis(conf),UserModel: sysmodel.NewSysUserModel(sqlConn),} }编写rpc服务 修改sys.proto文件 新增Redis操作请求的配置如下 message RedisReq{string name 1;string nickName 2;string password 3;string email 4;string key 5; }message RedisResp{string name 1;string nickName 2;string password 3;string email 4; }service Sys{// redis增删改查rpc RedisAdd(RedisReq)returns(RedisResp);rpc RedisDelete(RedisReq)returns(RedisResp);rpc RedisUpdate(RedisReq)returns(RedisResp);rpc RedisGet(RedisReq)returns(RedisResp); }用goctl生成rpc代码 生成方法同上篇文章自行查看。 编写API Gateway代码 编写api文件 redis.api 在api目录下创建新目录doc/redis在redis目录下创建redis.api文件。 syntax v1info(title: Redis操作相关desc: Redis操作相关author: 宋发元 )type (ApiRedisReq {Name string json:nameNickName string json:nickNamePassword string json:password,optionalEmail string json:email}ApiRedisResp {Code int64 json:codeMessage string json:messageData ApiRedisReq json:data}ApiRedisGetReq {Key string form:key} )server (group : redis/testprefix : /redis/test )service admin-api{doc(summary : Redis新增数据)handler RedisAddpost /redisAdd(ApiRedisReq)returns(ApiRedisResp)doc(summary : Redis删除数据)handler RedisDeletepost /redisDelete(ApiRedisReq)returns(ApiRedisResp)doc(summary : Redis修改数据)handler RedisUpdatepost /redisUpdate(ApiRedisReq)returns(ApiRedisResp)doc(summary : Redis查询数据)handler RedisGetget /redisGet(ApiRedisGetReq)returns(ApiRedisResp) }admin.api 在api/doc/目录下创建admin.api文件。 import sys/user.api import redis/redis.apiinfo(title : Golang学习项目author: songfayuanemail: songfayuan123qq.comversion: 1.0.0.0 )用goctl生成API Gateway代码 生成方法同上篇文章自行查看。但是此处要基于admin.api文件去生成代码如果基于redis.api生成则生成的代码只有redis.api定义的接口代码其他api文件定义的接口代码不被生成。 修改API Gateway代码调用rpc服务 redisaddlogic.go 修改api/internal/logic/redis/test/redisaddlogic.go里的RedisAdd方法如下 func (l *RedisAddLogic) RedisAdd(req *types.ApiRedisReq) (resp *types.ApiRedisResp, err error) {addRes, err : l.svcCtx.Sys.RedisAdd(l.ctx, sysclient.RedisReq{Name: req.Name,NickName: req.NickName,Password: req.Password,Email: req.Email,})if err ! nil {resJson, _ : json.Marshal(addRes)logx.WithContext(l.ctx).Errorf(Redis新增数据测试操作失败请求参数param %s异常信息errMsg %s, resJson, err.Error())return nil, rpcerror.New(err)}return types.ApiRedisResp{Code: 200,Message: 操作成功,Data: types.ApiRedisReq{Name: addRes.Name,NickName: addRes.NickName,Password: addRes.Password,Email: addRes.Email,},}, nil }redisdeletelogic.go 修改api/internal/logic/redis/test/redisdeletelogic.go里的RedisDelete方法如下 func (l *RedisDeleteLogic) RedisDelete(req *types.ApiRedisReq) (resp *types.ApiRedisResp, err error) {l.svcCtx.Sys.RedisDelete(l.ctx, sysclient.RedisReq{})return types.ApiRedisResp{Code: 200,Message: 操作成功,Data: types.ApiRedisReq{},}, nil }redisupdatelogic.go 修改api/internal/logic/redis/test/redisupdatelogic.go里的RedisUpdate方法如下 func (l *RedisUpdateLogic) RedisUpdate(req *types.ApiRedisReq) (resp *types.ApiRedisResp, err error) {updateRes, err : l.svcCtx.Sys.RedisUpdate(l.ctx, sysclient.RedisReq{Name: req.Name,NickName: req.NickName,Password: req.Password,Email: req.Email,})if err ! nil {resJson, _ : json.Marshal(updateRes)logx.WithContext(l.ctx).Errorf(Redis更新数据测试操作失败请求参数param %s异常信息errMsg %s, resJson, err.Error())return nil, rpcerror.New(err)}return types.ApiRedisResp{Code: 200,Message: 操作成功,Data: types.ApiRedisReq{Name: updateRes.Name,NickName: updateRes.NickName,Password: updateRes.Password,Email: updateRes.Email,},}, nil }redisgetlogic.go 修改api/internal/logic/redis/test/redisgetlogic.go里的RedisGet方法如下 func (l *RedisGetLogic) RedisGet(req *types.ApiRedisGetReq) (resp *types.ApiRedisResp, err error) {param : sysclient.RedisReq{}copier.Copy(param, req)getRes, err : l.svcCtx.Sys.RedisGet(l.ctx, param)if err ! nil {resJson, _ : json.Marshal(getRes)logx.WithContext(l.ctx).Errorf(获取数据测试操作失败请求参数param %s异常信息errMsg %s, resJson, err.Error())return nil, rpcerror.New(err)}return types.ApiRedisResp{Code: 200,Message: 操作成功,Data: types.ApiRedisReq{Name: getRes.Name,NickName: getRes.NickName,Password: getRes.Password,Email: getRes.Email,},}, nil }修改rpc代码调用crud代码 redisaddlogic.go 修改rpc/sys/internal/logic/redisaddlogic.go如下内容 // redis增删改查 func (l *RedisAddLogic) RedisAdd(in *sysclient.RedisReq) (*sysclient.RedisResp, error) {if in.Name {return nil, errors.New(账号不能为空)}if in.NickName {return nil, errors.New(姓名不能为空)}if in.Email {return nil, errors.New(邮箱不能为空)}// 将结构体转换为 JSON 字符串jsonString, err : json.Marshal(in)if err ! nil {logx.WithContext(l.ctx).Errorf(Redis新增数据测试数据转换json出错异常信息errMsg %s, err.Error())return nil, errors.New(数据转换异常)}// 添加数据到Redisvar key songfayuanaddErr : l.svcCtx.RedisClient.Set(key, string(jsonString))if addErr ! nil {return nil, errors.New(存储Redis异常)}// 查询Redis的数据getData, err : l.svcCtx.RedisClient.Get(key)// 将字符串数据解码为 RedisResp 结构体var redisResp sysclient.RedisResperr json.Unmarshal([]byte(getData), redisResp)if err ! nil {logx.WithContext(l.ctx).Errorf(Redis新增数据测试返回值封装异常异常信息errMsg %s, err.Error())return nil, errors.New(返回值封装异常)}return redisResp, nil }redisdeletelogic.go 修改rpc/sys/internal/logic/redisdeletelogic.go如下内容 func (l *RedisDeleteLogic) RedisDelete(in *sysclient.RedisReq) (*sysclient.RedisResp, error) {var key songfayuanres, err : l.svcCtx.RedisClient.Del(key)if err ! nil {return nil, errors.New(删除Redis异常)}logx.Infof(删除Redis数据结果%s, res)return sysclient.RedisResp{}, nil }redisupdatelogic.go 修改rpc/sys/internal/logic/redisupdatelogic.go如下内容 func (l *RedisUpdateLogic) RedisUpdate(in *sysclient.RedisReq) (*sysclient.RedisResp, error) {if in.Name {return nil, errors.New(账号不能为空)}if in.NickName {return nil, errors.New(姓名不能为空)}if in.Email {return nil, errors.New(邮箱不能为空)}// 将结构体数据转为json字符串jsonString, err : json.Marshal(in)if err ! nil {logx.WithContext(l.ctx).Errorf(Redis更新数据测试数据转换json出错异常信息errMsg %s, err.Error())return nil, errors.New(数据转换异常)}// 更新数据到Redis这里的修改就是设置新值即可key : songfayuaneditRes : l.svcCtx.RedisClient.Set(key, string(jsonString))if editRes ! nil {return nil, errors.New(修改Redis数据异常)}// 查询Redis的数据getData, err : l.svcCtx.RedisClient.Get(key)// 将字符串数据转换为结构体var redisResp sysclient.RedisResperr json.Unmarshal([]byte(getData), redisResp)if err ! nil {logx.WithContext(l.ctx).Errorf(修改Redis数据测试返回值封装异常异常信息errMsg %s, err.Error())return nil, errors.New(返回值封装异常)}return redisResp, nil }redisgetlogic.go 修改rpc/sys/internal/logic/redisgetlogic.go如下内容 func (l *RedisGetLogic) RedisGet(in *sysclient.RedisReq) (*sysclient.RedisResp, error) {// 查询Redis的数据getData, err : l.svcCtx.RedisClient.Get(in.Key)// 将字符串数据解码为 RedisResp 结构体var redisResp sysclient.RedisResperr json.Unmarshal([]byte(getData), redisResp)if err ! nil {logx.WithContext(l.ctx).Errorf(Redis新增数据测试返回值封装异常异常信息errMsg %s, err.Error())return nil, errors.New(返回值封装异常)}return redisResp, nil }完整调用演示 最后在根目录go-zero-demo执行下命令。 go mod tidy运行rpc服务 运行方法同上篇文章自行查看。 运行api 运行方法同上篇文章自行查看。 api调用 以下调用采用curl进行你也可以用postman调用。 新增接口 songfayuanMacBook-Pro  ~  curl -X POST -H Content-Type: application/json -d {name:songfayuan,nickName:宋发元,email:1414qq.com} localhost:8888/redis/test/redisAdd{code:200,message:操作成功,data:{name:songfayuan,nickName:宋发元,password:,email:1414qq.com}}%删除接口 songfayuanMacBook-Pro  ~  curl -X POST -H Content-Type: application/json -d {name:songfayuan,nickName:宋发元6666,email:1414qq.com} localhost:8888/redis/test/redisDelete{code:200,message:操作成功,data:{name:,nickName:,password:,email:}}%修改接口 songfayuanMacBook-Pro  ~  curl -X POST -H Content-Type: application/json -d {name:songfayuan,nickName:宋发元6666,email:1414qq.com} localhost:8888/redis/test/redisUpdate{code:200,message:操作成功,data:{name:songfayuan,nickName:宋发元6666,password:,email:1414qq.com}}%查询接口 songfayuanMacBook-Pro  ~  curl localhost:8888/redis/test/redisGet?keysongfayuan{code:200,message:操作成功,data:{name:songfayuan,nickName:宋发元6666,password:,email:1414qq.com}}%

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

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

相关文章

政务网站建设经验交流发言百度推广怎么运营

目录 1、QT介绍 2、QT的特点 3、QT模块 3.1基本模块 3.2扩展模块 4、QT工程创建 1.选择应用的窗体格式 2.设置工程的名称与路径 3.设置类名 4.选择编译器 5、QT 工程解析 xxx.pro 工程配置 xxx.h 头文件 main.cpp 主函数 xxx.cpp 文件 6、纯手工创建一个QT 工程…

嘉兴型网站系统总部在什么网站上可以做中学数学家教

全世界只有3.14 % 的人关注了青少年数学之旅在这个资讯丰富且易获取的时代,越来越多的人不愿意花时间阅读书籍,碎片化阅读成了主流。人们获取的东西多而杂,很难系统、全面。海量信息对人是冲击,更是诱惑。谁不想了解天下奇闻&…

网站建设先进跟我学seo从入门到精通

前言 从刚开始学习阶段,一直是用的keil5开发stm32程序,自从看到稚晖君推荐的CLion开发嵌入式程序后,这次尝试在CLion上开发stm32程序。 1、配置CLion用于STM32开发的环境 这里我就不详细写了,没必要重新写,网上教程很多…

商城网站微信支付接口申请流程网站留言板怎么做

《基于单片机的物流皮带传输监控系统设计 实物仿真》 整体功能: 本设计采用以单片机为核心控制器,以及传感器检测部分作为输入部分,以报警、显示、洒水、排烟、电机停止模块作为输出部分,构成整个物流皮带传输监控系统。 本设计…

北京哪个网站最好重庆哪个网站建设比较好

文章目录1. 题目2. 解题1. 题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 . 表示)和墙(用 表示)。 同时给你迷宫的入口 entrance ,用 entrance [entra…

简洁的网站建设合同武进做网站的公司

通信,在古代是通过书信与他人互通信息的意思。 今天,“通信”这个词的外沿已经得到了极大扩展,它目前的大意是指双方或多方借助某种媒介实现信息互通的行为。 如果按照当代汉语的方式理解“通信”,那么古代的互遣使节、飞鸽传书…

济南网站建设直播苗木企业网站源码

一、首先需要思考,我们在页面导出excel,用python导出如何写入文件的 封装前需要确认python导出excel接口返回的是一个什么样的数据类型 如下:我们先看下不对返回结果做处理,直接接收数据类型是一个对象,无法获取返回值…

代码随想录算法训练营第五天 | leetcode 242 349 202 1

有效的字母异位词 题目:判断两个字符串的字母是否一样 解题思路:通过字母在Ascll表对应的数字可以定义一个26容量大小的数组,将字符串包含的字母映射到数组中,再用另一个字符串对数组进行操作 代码如下: class So…

CF2146 Codeforces Round 1052 (Div. 2) 游记

A 秒了,B 挂了,1t寄了,差点掉到青名。省流 A 秒了,B 挂了,1t寄了,差点掉到青名。9.21 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 毫无压力的新开一把,飞线接上了电源,不会因为电脑没电下班了。 赛时…

原码补码反码与位操作

今天搜索互联网那个引擎了解了原码补码反码的相关概念 原码是最直观的编码方式,用最高位表示符号(0为正,1为负),其余位表示数值的绝对值 正数的反码与原码相同;负数的反码是对其原码的数值位取反(符号位不变) …

如何安装 SQLPro Studio for Mac?v2024.21.dmg 文件安装步骤详解(附安装包)

如何安装 SQLPro Studio for Mac?v2024.21.dmg 文件安装步骤详解(附安装包)​一、安装前准备​确保你下的是靠谱的文件​ SQLPro Studio for Mac v2024.21.dmg​ 应该是一个 ​DMG 格式的安装包,安装包下载:https…

全新正版营销网站怎么给钓鱼网站做防红

计算函数的变分是指在变分法中寻找函数的极值。变分法是一种数学方法,用于求解函数或泛函的极值问题。在物理学、工程学和数学的最优化问题中,变分法是寻找函数使得某个泛函(函数的函数)达到极值的过程。 在数学上,泛…

网站建设方案平台架构做网站需要备案吗

2017年2月8日,那是一个阴天。为了完成高翔博士的《一起做RGB-D SLAM》教程,我在 Ubuntu 14.04 安装 g2o。遇到困难,怎奈我眼瞎,找错了方向,浪费时间,没有成功安装。 问题如下(跳到最后一个问题描…

郑州炫彩网站建设万网网站建设流程

IO流IO流使用场景 什么是IO流常用的IO流字节流字符流缓冲流 BIO、NIO、AIO的区别 IO流 IO流使用场景 如果操作的是纯文本文件,优先使用字符流如果操作的是图片、视频、音频等二进制文件。优先使用字节流如果不确定文件类型,优先使用字节流。字节流是万能…

献县网站建设公司wordpress主题更新失败

2023年8月18日,周五上午 今天在B站看Qt教学视频的时候遇到了 目录 语法和typedef或using结合我的总结 语法 返回类型 (*指针变量名)(参数列表)以下是一些示例来说明如何声明不同类型的函数指针: 声明一个不接受任何参数且返回void的函数指针&#xf…

深圳外贸网站商城相片制作图片

避免索引失效原则(二)注:继上一篇文章继续讲解:避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062作者 : Stanley 罗昊【转载请注明出处和署名,谢谢!】体验SQL优化中的概率情况在上一…

带有互动的网站开发网页设计素材 模板材料

安卓自定义属性主要有3个步骤 在values文件夹新建attrs.xml文件中声明属性&#xff0c;包括属性名和格式&#xff0c;format常用属性有string ,integer,reference等 <?xml version"1.0" encoding"utf-8"?> <resources><!-- 声明属性集…

建设网站 (公司)学做网站要代码

苹果的应用讲究用户体验 有的时候仔细想想 的确&#xff0c;很多细节决定了用户体验 比如说惯性拖动 可以说之前没有任何一家厂商能把触摸惯性拖动做的像苹果的UI那么流畅 Cocos2D中实现能够惯性拖动的选择界面 完成的效果&#xff1a; 制作一个简单的图层&#xff0c;通过传入…

服装网站模板游戏开发模拟器

简介&#xff1a; 优酷视频内容数据天然呈现巨大的网络结构&#xff0c;各类数据实体连接形成了数十亿顶点和百亿条边的数据量&#xff0c;面对巨大的数据量&#xff0c;传统关系型数据库往往难以处理和管理&#xff0c;图数据结构更加贴合优酷的业务场景&#xff0c;图组织使用…