go-zero学习及使用中遇到的问题
go-zero学习及使用中遇到的问题
- 1 go-zero入门--单体服务demo
- 1.1 单体服务【官方示例】
- 1.1.1 创建greet服务
- 1.1.2 目录结构
- 1.1.3 编写逻辑
- 1.1.4 启动并访问服务
- 1.2 修改GET入参
- 1.2.1 去除options限制的入参值
- 1.2.2 重启并访问服务
- 1.3 添加post请求【新增方法】
- 1.3.1 修改 `greet/greet.api` 文件
- 1.3.2 重新生成代码
- 1.3.3 修改`logic/greetpostlogic.go`文件
- 1.3.4 重启并访问服务
- 2 go-zero入门--微服务demo
- 2.1 新建微服务
- 2.2 API接口模块添加后端模块
- 3 go-zero 框架下swagger使用
- 4 goctl 相关命令整理
- 4.1 .api生成swagger的命令
- 4.2 .api生成api模块的命令
- 4.3 .proto生成rpc模块的命令
- 4.4 sql文件生成model的命令
- 4.5 docker启动swagger的命令
- #####################################################
- 1 field name set
- 2 greet.api line 25:1 expecting 'http method', found input '@handler'
1 go-zero入门–单体服务demo
参考1:go-zero入门–单体服务demo
推荐先阅读参考1。
1.1 单体服务【官方示例】
1.1.1 创建greet服务
goctl api new greet
1.1.2 目录结构
.
├── go.mod
├── go.sum
├── etc
│ └── greet-api.yaml
├── greet.api
├── greet.go
└── internal├── config│ └── config.go├── handler│ ├── greethandler.go│ └── routes.go├── logic│ └── greetlogic.go├── svc│ └── servicecontext.go└── types└── types.go
1.1.3 编写逻辑
greet/internal/logic/greetlogic.go
func (l *GreetLogic) Greet(req *types.Request) (resp *types.Response, err error) {// todo: add your logic here and delete this linereturn &types.Response{Message: "Hello go-zero:" + req.Name,}, nil
}
1.1.4 启动并访问服务
启动:在greet
目录下执行:
go run greet.go -f etc/greet-api.yaml
访问:http://localhost:8888/from/you
注意:
- 端口的设置是在
etc/greet-api.yaml
中。 - 访问地址中的最后资源只能是
you
或me
,否则会报错,这个是在greet.api
中配置的。
1.2 修改GET入参
1.2.1 去除options限制的入参值
- 修改
greet/greet.api
文件
type Request {Name string `path:"name,options=you|me"`
}
改为:
type Request {Name string `path:"name"`
}
- 重新生成代码
cd ~/go-zero-single_demo/greet
goctl api go -api greet.api -dir . -style gozero
注意:执行完goctl
后会重新生成以下文件,如果没有新增的东西,可能会看不出来,具体可看执行日志。
types/types.go
handler/的文件
logic/的文件
1.2.2 重启并访问服务
重启:
go run greet.go -f etc/greet-api.yaml
访问:http://localhost:8888/from/哈哈
1.3 添加post请求【新增方法】
1.3.1 修改 greet/greet.api
文件
注意:service里的api必须是handler和访问接口一一对应,放在一起,否则会报错。可看 2 greet.api line 25:1 expecting 'http method', found input '@handler'
type Request {Name string `path:"name"`
}type Response {Message string `json:"message"`
}//1、post 方法的请求内容
type RequestJson {Name string `json:"name"`
}service greet-api {@handler GreetHandlerget /from/:name(Request) returns (Response)//2、post 方法的处理器@handler GreetPostHandlerpost /from/:name(RequestJson) returns (Response)
}
1.3.2 重新生成代码
cd ~/go-zero-single_demo/greet
goctl api go -api greet.api -dir . -style gozero
注意:执行完goctl
后会重新生成以下文件。
types/types.go
handler/routes.go
:增加了的访问接口的路由。
同时会新增以下文件:
handler/greetposthandler.go
logic/greetpostlogic.go
1.3.3 修改logic/greetpostlogic.go
文件
func (l *GreetPostLogic) GreetPost(req *types.RequestJson) (resp *types.Response, err error) {// todo: add your logic here and delete this linereturn &types.Response{Message: "Hello go-zero name:" + req.Name,}, nil
}
1.3.4 重启并访问服务
重启:
cd ~/go-zero-single_demo/greet
go run greet.go -f etc/greet-api.yaml
POST
方式访问:
POST http://127.0.0.1:8888/from/哈哈 HTTP/1.1
Content-Type: application/json
{"name":"post 哈哈"
}
返回结果:
{"message": "Hello go-zero name:post 哈哈"
}
2 go-zero入门–微服务demo
2.1 新建微服务
参考1:go-zero入门–微服务demo
2.2 API接口模块添加后端模块
API接口模块添加后端模块需要改动3个地方。
- etc/xxx.yaml
主要是配置后端模块的Etcd服务发现。
示例:
Name: order
Host: 0.0.0.0
Port: 8889
UserRpc:Etcd:Hosts:- 192.168.13.3:2379Key: user.rpc
- internal/config/config.go
主要是配置后端调用的模块RPC。
示例:
package configimport ("github.com/zeromicro/go-zero/rest""github.com/zeromicro/go-zero/zrpc"
)type Config struct {rest.RestConfUserRpc zrpc.RpcClientConf
}
- internal/svc/servicecontext.go
主要是将 2 配置的后端服务模块加入到 API接口模块的ServiceContext
中。
示例:
package svcimport ("github.com/zeromicro/go-zero/zrpc""go-zero-micro-demo/mall/order/api/internal/config""go-zero-micro-demo/mall/user/rpc/userclient"
)type ServiceContext struct {Config config.ConfigUserRpc userclient.User
}func NewServiceContext(c config.Config) *ServiceContext {return &ServiceContext{Config: c,UserRpc: userclient.NewUser(zrpc.MustNewClient(c.UserRpc)),}
}
3 go-zero 框架下swagger使用
参考1:goctl-swagger
看参考1 中README.md
,里面有下载及使用的操作流程。
生成swagger.json
文件的命令:
goctl api plugin -plugin goctl-swagger="swagger -filename user.json" -api user.api -dir .
4 goctl 相关命令整理
4.1 .api生成swagger的命令
示例:
goctl api plugin -plugin goctl-swagger="swagger -filename tracksourcetask.json" -api tracksourcetask.api -dir .
4.2 .api生成api模块的命令
示例:
goctl api go -api ./doc/admin.api -dir .
4.3 .proto生成rpc模块的命令
示例:
goctl rpc protoc tracksource.proto --go_out=./ --go-grpc_out=./ --zrpc_out=.
4.4 sql文件生成model的命令
goctl model mysql ddl -src="./rpc/doc/sql/appsystem/dsms*.sql" -dir="./rpc/model/appsystemodel"
4.5 docker启动swagger的命令
docker run -d -p 9981:8080 --name=swagger-tracksourcetask -v /root/doc:/tmp -e SWAGGER_FILE=/tmp/tracksourcetask-v2.json swaggerapi/swagger-editor
#####################################################
1 field name set
要修改设置结构体的变量,应该在greet.api中,然后再使用下面的命令生成对应的结构体和业务类。
goctl api go -api greet.api -dir . -style gozero
2 greet.api line 25:1 expecting ‘http method’, found input ‘@handler’
源码:
service greet-api {@handler GreetHandler@handler GreetCustomizedHandlerget /from/:name/:age(Request) returns (Response)get /customized/:address/:phone(CustomizedRequest) returns (CustomizedResponse)
}
错误写法:一个@handler
对应一个api
,但是两者需要紧挨着。@handler
和@handler
放一块、api
和api
放一块的写法是错误的。
正确写法:
service greet-api {@handler GreetHandlerget /from/:name/:age(Request) returns (Response)@handler GreetPostHandlerpost /from/:name(RequestJson) returns (Response)
}
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
go-zero学习及使用中遇到的问题
go-zero学习及使用中遇到的问题1 go-zero入门--单体服务demo1.1 单体服务【官方示例】1.1.1 创建greet服务1.1.2 目录结构1.1.3 编写逻辑1.1.4 启动并访问服务1.2 修改GET入参1.2.1 去除options限制的入参值1.2.2 重启并访问服务1.3 添加post请求【新增方法】1.3.1 修改 greet/…...
![](https://img-blog.csdnimg.cn/a773af224fe444819cf403507b85786a.png)
CCF-CSP认证 202303 500分题解
202303-1 田地丈量(矩阵面积交) 矩阵面积交x轴线段交长度*y轴线段交长度 线段交长度,相交的时候是min右端点-max左端点,不相交的时候是0 #include<bits/stdc.h> using namespace std; int n,a,b,ans,x,y,x2,y2; int f(in…...
![](https://img-blog.csdnimg.cn/img_convert/b4a331e550f5471dba2bae2c87c115a8.png)
板内盘中孔设计狂飙,细密间距线路中招
一博高速先生成员:王辉东大风起兮云飞扬,投板兮人心舒畅。赵理工打了哈欠,伸了个懒腰,看了看窗外,对林如烟说道:“春天虽美,但是容易让人沉醉。如烟,快女神节了,要不今晚…...
![](https://img-blog.csdnimg.cn/1920b825d2514eb8b5e0a37fbab16fd0.png)
面试热点题:回溯算法 递增子序列与全排列 II
前言: 如果你一点也不了解什么叫做回溯算法,那么推荐你看看这一篇回溯入门,让你快速了解回溯算法的基本原理及框架 递增子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两…...
![](https://www.ngui.cc/images/no-images.jpg)
怎么找回回收站删除的文件
我们都知道,电脑文件都是放在桌面上的,单独存放或者一起存放在文件夹里。但总会有已用完或者是没用的文件,这让我们不得不对其进行清理。而清空回收站也是不可避免的。如果出现了清空文件中还有我们需要的文件,怎么找回回收站删除…...
![](https://www.ngui.cc/images/no-images.jpg)
dp-打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非…...
![](https://www.ngui.cc/images/no-images.jpg)
C++预处理连接
目录定义常量字符串前缀定义枚举类型Boost C库中常常使用预处理连接来定义宏和模板类Google开源的C单元测试框架gtest,使用预处理连接技术创建测试用例和测试方法C预处理连接(Preprocessor Concatenation)是一种宏定义技巧,用于将…...
![](https://img-blog.csdnimg.cn/c03bb060a4da4c95b890ae07a3dc8d3b.png)
3、DRF实战总结:基于类的视图APIView, GenericAPIView和GenericViewSet视图集(附源码)
前面介绍了什么是符合RESTful规范的API接口,以及使用了基于函数的视图(FBV)编写了对文章进行增删查改的API。在本篇文章将使用基于类的视图(Class-based View, CBV)重写之前的接口。 参考: 1、Django开发总结:Django MVT与MVC设计模式&…...
![](https://www.ngui.cc/images/no-images.jpg)
AutoSAR PduR -AutoSAR PDU常用的使用方式【发送,接收,网关】
总目录链接==>> AutoSAR入门和实战系列总目录 @学前问答: AutoSAR PDU在哪里全局定义的? AutoSAR PDU涉及到哪些模块? AutoSAR PDU网关怎么使用? 文章目录 1 AutoSAR PDU发送2 AutoSAR PDU接收3 AutoSAR PDU网关转发4 答疑解析AutoSAR PDU 怎么样通过PduR 实现与其…...
![](https://img-blog.csdnimg.cn/img_convert/d4ddfae503e22b43491e6f7df54ae083.png)
瑟瑟发抖吧~OpenAI刚刚推出王炸——引入ChatGPT插件,开启AI新生态
5分钟学会使用ChatGPT 插件(ChatGPT plugins)——ChatGPT生态建设的开端ChatGPT插件是什么OpenAI最新官方blog资料表示,已经在ChatGPT中实现了对插件的初步支持。插件是专门为以安全为核心原则的语言模型设计的工具,可帮助ChatGPT…...
![](https://img-blog.csdnimg.cn/1f632cfb5dc84525bed7a0f6049d984b.png)
脉诊(切脉、诊脉、按脉、持脉)之法——入门篇
认识脉诊何谓脉诊?脉诊的渊源脉诊重要吗?脉诊确有其事,还是故弄玄虚?中医科学吗?如何脉诊?寸口脉诊法何谓脉诊? 所谓脉诊,就是通过把脉来诊断身体健康状况的一种必要手段。 …...
![](https://www.ngui.cc/images/no-images.jpg)
【十二天学java】day09常用api介绍
1.API 1.1API概述 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这…...
![](https://img-blog.csdnimg.cn/img_convert/0a6652b70a1443fdafcf5b16bc59ff3c.png)
软件测试 - 测试用例常见面试题
1.测试用例的要素测试用例是为了实施测试而向被测试的系统提供的一组集合, 这组集合包含 : 测试环境, 操作步骤, 测试数据, 预期结果等要素.例如 : 在 B 站输入框输入一个空格, 检查结果测试用例标题 : 输入框输入空格测试环境 : Windows 系统, 谷歌浏览器-版本 111.0.5563.65&…...
![](https://www.ngui.cc/images/no-images.jpg)
几种常见的API接口分页方案
文章目录1 概述2 分页方案2.1 基于偏移量2.2 基于游标3 重复数据处理3.1 基于时间3.2 基于热度3.3 基于推荐1 概述 列表是互联网产品中很常见的一种内容排列形式,而且列表的数据集往往成千上万,一次性返回全量数据集的场景几乎不存在,所以出…...
![](https://www.ngui.cc/images/no-images.jpg)
【Object 类的方法】
在 Java 中,所有类都继承了 Object 类,因此 Object 类中的方法可以在所有 Java 对象中使用。下面是 Object 类中的一些常用方法介绍: equals(Object obj): 用于判断两个对象是否相等。默认情况下,该方法比较的是两个对象的地址是…...
![](https://www.ngui.cc/images/no-images.jpg)
留用户、补内容,在线音乐暗战不停
在线音乐在人们的日常生活中扮演着愈发重要的角色,尤其是在面临巨大压力时,人们往往更倾向于通过倾听一段音乐来缓解内心的紧张与焦虑。而随着在线音乐用户数量的增长以及付费意愿的增强,在线音乐行业也实现了稳步发展。 经过多年的发展&…...
![](https://www.ngui.cc/images/no-images.jpg)
python--exec
在Python中,eval和exec都是用来执行动态代码的内置函数,但它们的作用和使用方式有所不同。 eval(): 将字符串作为Python表达式进行求值,并返回结果。 exec(): 将字符串作为Python语句进行执行,没有返回值。 eval()的使用范围通常限…...
![](https://www.ngui.cc/images/no-images.jpg)
干货分享!这6个高效率办公软件,总有一个值得你收藏!
分享6款高效办公软件,可以解决你很多需求,职场人一定要知道。每一款都是精挑细的,可能有的已经很大众了,但肯定还有小伙伴不知道,废话不多说,直接看!! 1、Flomo笔记:记录…...
![](https://img-blog.csdnimg.cn/8689fc9384944a8ab71a7690929fdff2.png)
代码随想录刷题-链表总结篇
文章目录链表理论基础单链表双链表循环链表其余知识点链表理论基础单链表双链表循环链表其余知识点移除链表元素习题我的解法虚拟头结点解法设计链表习题我的解法代码随想录代码反转链表习题双指针递归两两交换链表中的节点习题我的解法代码随想录解法删除链表的倒数第N个节点习…...
![](https://www.ngui.cc/images/no-images.jpg)
C++:指针:什么是野指针
野指针目录1:定义2:野指针常见情形2.1 :未初始化的野指针2.2 所指的对象已经消亡2.3 指针释放之后未置空3:避免野指针1:定义 指向非法的内存地址的指针叫做野指针(Wild Pointer),也…...
![](https://img-blog.csdnimg.cn/2a3cf08fe0b744eea4cefe0c73461f74.png)
一线大厂高并发Redis缓存架构
文章目录高并发缓存架构设计架构设计思路完整代码开发规范与优化建议键值设计命令使用客户端的使用扩展布隆过滤器redis的过期键的清除策略高并发缓存架构设计 架构设计思路 首先是一个基础的缓存架构,对于新增、修改操作set会对缓存更新,对于查询操作…...
![](https://img-blog.csdnimg.cn/c35f83e51da144b495d066812053ed70.png)
剑指offer-二维数组中的查找
文章目录题目描述题解一 无脑暴力循环题解二 初始二分法🌕博客x主页:己不由心王道长🌕! 🌎文章说明:剑指offer-二维数组中的查找🌎 ✅系列专栏:剑指offer 🌴本篇内容:对剑…...
![](https://img-blog.csdnimg.cn/4a1f248327ca40109644be93aa7225fc.png)
怎么设计一个秒杀系统
1、系统部署 秒杀系统部署要单独区别开其他系统单独部署,这个系统的流量肯定很大,单独部署。数据库也要单独用一个部署的数据库或者集群,防止高并发导致整个网站不可用。 2、防止超卖 100个库存,1000个人买,要保证不…...
![](https://www.ngui.cc/images/no-images.jpg)
程序参数解析C/C++库 The Lean Mean C++ Option Parser
开发中我们经常使用程序参数,根据参数的不同来实现不同的功能。POSIX和GNU组织对此都制定了一些标准,为了我们程序更为通用标准,建议遵循这些行业内的规范,本文介绍的开源库The Lean Mean C Option Parser就可以很好满足我们的需求…...
![](https://img-blog.csdnimg.cn/5328ce70481e418b89a8872811d01d62.png)
Java中的深拷贝和浅拷贝
目录 🍎引出拷贝 🍎浅拷贝 🍎深拷贝 🍎总结 引出拷贝 现在有一个学生类和书包类,在学生类中有引用类型的书包变量: class SchoolBag {private String brand; //书包的品牌private int size; //书…...
![](https://img-blog.csdnimg.cn/img_convert/aa79105e6cbd9ed98ddf7cd03f8b2be2.png)
大文件上传
上图就是大致的流程一、标题图片上传课程的标题图片Ajax发送请求到后端后端接收到图片使用IO流去保存图片,返回图片的信息对象JS回调函数接收对象通过$("元素id").val(值),方式给页面form表达img标签src属性值,达到上传图片并回显二…...
![](https://img-blog.csdnimg.cn/485e23fe171340ac8aa6484295c452bf.png)
Python每日一练(20230327)
目录 1. 最大矩形 🌟🌟🌟 2. 反转链表 II 🌟🌟 3. 单词接龙 II 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日…...
![](https://img-blog.csdnimg.cn/1cca3999b7114b879c6c950d138e6064.png)
Centos7 升级内核到5.10mellanox 编译安装
升级5.10内核 #uname -r 重启后 进入新的内核 进入新的内核信息 直接查看是看不到gcc版本 5.10需要高版本gcc 才可以进行编译...
![](https://img-blog.csdnimg.cn/a38aef474d6b42e6b14c6d0011e33e62.png)
冯诺依曼,操作系统以及进程概念
文章目录一.冯诺依曼体系结构二.操作系统(operator system)三.系统调用和库函数四.进程1.进程控制块(PCB)2.查看进程3.系统相关的调用4.fork介绍(并发引入)五.总结一.冯诺依曼体系结构 计算机大体可以说是…...
![](https://img-blog.csdnimg.cn/2e5d29bdcd8a4e57937bca68158eca88.png)
7.网络爬虫—正则表达式详讲
7.网络爬虫—正则表达式详讲与实战Python 正则表达式re.match() 函数re.search方法re.match与re.search的区别re.compile 函数检索和替换检索:替换:findallre.finditerre.split正则表达式模式常见的字符类正则模式正则表达式模式量词正则表达式举例前言&…...
![](/images/no-images.jpg)
网站建设需要多钱/app营销策略有哪些
单例模式 一、什么是单例模式 单例模式(Singleton Pattern)是最简单的设计模式之一:一个单一的类,负责创建自己的对象,同时提供一个方法直接获取唯一的实例。其中当第一次获取这个对象的时候才实例化这个对象&#x…...
![](https://img-blog.csdnimg.cn/img_convert/bcf0fec78a2a5003902dc5eb47dd0c0d.png)
青岛网站建/网络推广网络营销外包
(学习Verilog)3. FPGA有符号数,定点小数表示及计算机数值表示规则 介绍了FPGA内部常用的有符号数,符号位,定点小数的表示方法。定点数硬件实现简单,但表示的范围有限,且部分的小数运算IP核只支持…...
![](/images/no-images.jpg)
企业网站目的/手机注册网站
概念及注意事项1、组函数:对一组数据进行操作,最后返回一个值,用作统计分析,求所有的非空值。2、关键字DISTINCT可以排除重复值。3、参数的类型可以是CHAR,VARCHAR2,NUMBER,DATE4、除了COUNT(*)外,其他所有组函数都忽略空值&#…...
![](/images/no-images.jpg)
全屋定制设计培训哪里有/惠州seo代理计费
国家超算无锡中心近日发布“无锡超算云平台”,并宣布设立10个产业化平台,打造世界一流的超算技术与产业发展深度融合的高性能计算应用生态圈。 “无锡超算云平台”是一个以国家超算无锡中心为基础的高性能计算应用通用云桌面系统。国家超算无锡中心主任杨…...
![](https://www.oschina.net/img/hot3.png)
怎么给喜欢的人做网站/网络推广外包想手机蛙软件
2019独角兽企业重金招聘Python工程师标准>>> 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下 相关测验题目:http://ask.apelearn.com/question/5437 扩展 1. source exec 区别 http://alsww.blog.51cto.c…...
![](http://news.51cto.com/files/uploadimg/20070910/1214062.jpg)
淘宝上做网站权重/快速排名精灵
桌面虚拟化管理的实施才刚刚起步,用户对桌面虚拟化的管理还存在许多疑惑,为此,我将于9月7日主讲51CTO的线下活动,欢迎报名参加。主题:企业用户的虚拟化桌面管理解决方案——用虚拟化控制你的桌面系统◆ VMware ACE 2 …...