gozero--环境安装和api语法

文章目录

  • 前言
  • 环境安装
    • 安装go ctl
    • 安装protoc
    • 安装go-zero
    • 安装etcd
    • 配置环境变量
    • 安装插件
  • 二、api语法说明
    • syntax
    • type
    • @server
    • service
    • @doc
    • 命令转换


前言

go-zero是go语言的微服务框架,微服务内容很多,我希望我这一篇可以绘制出完整的地图,帮助需要学习微服务的,清楚基础怎么走,然后再去做做项目。学会go-zero。


环境安装

开始学习go-zero了,就默认你已经安装go语言了。

安装go ctl

go install github.com/zeromicro/go-zero/tools/goctl@latest

安装protoc

goctl env check --install --verbose --force

安装go-zero

go get -u github.com/zeromicro/go-zero@latest

安装etcd

etcd我们主要是用于微服务的配置中心,服务发现。(使用rpc的时候,需要用到)
etcd的安装非常非常简单。
下载下来
https://github.com/etcd-io/etcd/releases
把etcd的工作目录(也就是根目录,etcd-v3.5.13-windows-amd64)加到环境变量里面

使用的时候,打开etcd.exe就可以了。

在这里插入图片描述

配置环境变量

我们需要把gopath中的bin目录给配置到环境变量里面

因为我们的goctl和proto转换工具放在gopath的bin目录里面
在这里插入图片描述

安装插件

在goland的插件市场里面,搜索goctl,点击安装

二、api语法说明

go-zero的文档,对这方面说的很详细

https://go-zero.dev/docs/tutorials

api 是 go-zero 自研的领域特性语言(下文称 api 语言 或 api 描述语言),旨在实现人性化的基础描述语言,作为生成 HTTP 服务最基本的描述语言。(使用goctl来生成对应的代码)

api 领域特性语言包含语法版本,info 块,结构体声明,服务描述等几大块语法组成,其中结构体和 Golang 结构体 语法几乎一样,只是移出了 struct 关键字。

关于api的语法,你只要能看懂下面这个,你基本上就没什么问题了。

 syntax = "v1"info (title:   "api 文件完整示例写法"desc:    "演示如何编写 api 文件"author:  "keson.an"date:    "2022 年 12 月 26 日"version: "v1"
)type UpdateReq {Arg1 string `json:"arg1"`
}type ListItem {Value1 string `json:"value1"`
}type LoginReq {Username string `json:"username"`Password string `json:"password"`
}type LoginResp {Name string `json:"name"`
}type FormExampleReq {Name string `form:"name"`
}type PathExampleReq {// path 标签修饰的 id 必须与请求路由中的片段对应,如// id 在 service 语法块的请求路径上一定会有 :id 对应,见下文。ID string `path:"id"`
}type PathExampleResp {Name string `json:"name"`
}@server (jwt:        Auth // 对当前 Foo 语法块下的所有路由,开启 jwt 认证,不需要则请删除此行prefix:     /v1 // 对当前 Foo 语法块下的所有路由,新增 /v1 路由前缀,不需要则请删除此行group:      g1 // 对当前 Foo 语法块下的所有路由,路由归并到 g1 目录下,不需要则请删除此行timeout:    3s // 对当前 Foo 语法块下的所有路由进行超时配置,不需要则请删除此行middleware: AuthInterceptor // 对当前 Foo 语法块下的所有路由添加中间件,不需要则请删除此行maxBytes:   1048576 // 对当前 Foo 语法块下的所有路由添加请求体大小控制,单位为 byte,goctl 版本 >= 1.5.0 才支持
)
service Foo {// 定义没有请求体和响应体的接口,如 ping@handler pingget /ping// 定义只有请求体的接口,如更新信息@handler updatepost /update (UpdateReq)// 定义只有响应体的结构,如获取全部信息列表@handler listget /list returns ([]ListItem)// 定义有结构体和响应体的接口,如登录@handler loginpost /login (LoginReq) returns (LoginResp)// 定义表单请求@handler formExamplepost /form/example (FormExampleReq)// 定义 path 参数@handler pathExampleget /path/example/:id (PathExampleReq) returns (PathExampleResp)
}

syntax

指出当前的版本

type

定义结构体,我们一般是用来定义请求和响应的结构体。也可以进行结构体嵌套。

@server

对当前 语法块下的所有路由,开启功能
目前可以开启的功能,是jwt,路由前缀,路由分组,超时时间,中间件,和控制请求体的大小

这里要特别说一下,prefix和group这两个,我们知道gin里面有路由分组的概念,那么,prefix跟gin里面的路由分组的概念,我觉得是一致的,而group则是在文件夹上,把他们分在一组。

@server (jwt:        Auth // 对当前 Foo 语法块下的所有路由,开启 jwt 认证,不需要则请删除此行prefix:     /v1 // 对当前 Foo 语法块下的所有路由,新增 /v1 路由前缀,不需要则请删除此行group:      g1 // 对当前 Foo 语法块下的所有路由,路由归并到 g1 目录下,不需要则请删除此行timeout:    3s // 对当前 Foo 语法块下的所有路由进行超时配置,不需要则请删除此行middleware: AuthInterceptor // 对当前 Foo 语法块下的所有路由添加中间件,不需要则请删除此行maxBytes:   1048576 // 对当前 Foo 语法块下的所有路由添加请求体大小控制,单位为 byte,goctl 版本 >= 1.5.0 才支持
)

service

service就是根据我们的路由,来生成对应代码的地方,其中,这个service后面的命名,会跟我们后续生成的文件夹保持一致。我们之前常写的restful API风格,这里也能写

这里可以好好理解一下,跟我们之前写的那种方式类比一下

service Foo {// 定义没有请求体和响应体的接口,如 ping@handler pingget /ping// 定义只有请求体的接口,如更新信息@handler updatepost /update (UpdateReq)// 定义只有响应体的结构,如获取全部信息列表@handler listget /list returns ([]ListItem)// 定义有结构体和响应体的接口,如登录@handler loginpost /login (LoginReq) returns (LoginResp)// 定义表单请求@handler formExamplepost /form/example (FormExampleReq)// 定义 path 参数@handler pathExampleget /path/example/:id (PathExampleReq) returns (PathExampleResp)

@doc

doc 这个在goctl里面是生成makedown文件的,使用插件好像是可以生成swagger 文档。

go install github.com/zeromicro/goctl-swagger@latest

生成swagger文档用的。


service Foo {
@doc(summary: "ping")// 定义没有请求体和响应体的接口,如 ping@handler pingget /ping}

命令转换

上面讲了那么多,就该讲一讲如何把api生成对应的代码了

goctl api go -api video/api/video.api -dir video/api

goctl api 需要生成的语言 -api api的路径 -dir 需要生成到的文件夹


我用夸克网盘分享了「计算机block book」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/86f86b47d3af
提取码:dGnR

我用夸克网盘分享了「技术book」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/a64f284c3e35
提取码:gVUq

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

vue中el-table显示文本过长提示

1.el-table设置轻提示:show-overflow-tooltip“true“,改变轻提示宽度

在VS中安装chatGPT

2、在VSCode中打开插件窗口 3、输入ChatGPT 4、这里有个ChatGPT中文版,就它了 5、安装 6、这时候侧边栏多了一个chatGPT分页图标,点击它 7、打个招呼 8、好像不行 9、看一下细节描述 10、根据要求按下按下快捷键 Ctrl Shift P 11、切换成国内模式 12、…

sublime可以写python吗

首先你需要安装一个Sublime Text(http://www.sublimetext.com/)和一个Python(https://www.python.org/downloads/), 接下来打开Sublime Text: 1、如下图所示,点击菜单栏中的Tools —> Buil…

初始Docker

概述: 容器,作为云原生技术的重要组成部分,与虚拟机一样,均属于虚拟化技术的范畴。然而,容器技术以其独特的优势,在虚拟化领域中脱颖而出。与虚拟机不同,容器能够摆脱操作系统的束缚&#xff0…

MATLAB函数,用于计算平均误差、误差最大值、标准差、均方误差、均方根误差

文章目录 源代码使用示例:计算公式1. 平均误差 (Mean Error, ME)2. 误差最大值 (Maximum Error, ME)3. 标准差 (Standard Deviation, SD)4. 均方误差 (Mean Squared Error, MSE)5. 均方根误差 (Root Mean Squared Error, RMSE) 总结 以下是一个MATLAB函数,用于计算常…

Axure设计之左右滚动组件教程(动态面板)

很多项目产品设计经常会遇到左右滚动的导航、图片展示、内容区域等,接下来我们用Axure来实现一下左右滚动的菜单导航。通过案例我们可以举一反三进行其他方式的滚动组件设计,如常见的上下滚动、翻页滚动等等。 一、效果展示: 1、点击“向左箭…

软考攻略/超详细/系统集成项目管理工程师/基础知识分享19

7.1 系统集成基础(掌握) 系统集成一般可以分为软件集成、硬件集成、网络集成、数据集成和业务应用集成等。 1、系统集成概念理解 软硬件系统集成是一种系统的思想和方法,它虽然涉及软件和硬件等技术问题,但绝不仅仅是技术问题 软硬…

数据库Redis篇

系列文章目录 第一章 C/C语言篇第二章 计算机网络篇第三章 操作系统篇第四章 数据库MySQL篇第五章 数据库Redis篇第六章 场景题/算法题第七篇 常见HR问题篇 本系列专栏:点击进入 后端开发面经 关注走一波 秋招阶段,面过很多大中小厂,积攒了…

SpringAOP技术

目录 一、概念引入 1.引入依赖 2.工具类 3.实体类 4.持久层实现类 5.业务层实现类 6.配置文件 7.测试类 8.运行 查看数据库: 9.现在如果转账过程中出现异常 AccountServiceImpl(模拟异常) 再运行: 查看数据库: 10.现在做事务…

从富文本窥探苹果的代码秘密

从富文本窥探苹果的代码秘密 背景 在我们的业务场景下,为突出诸如 “利益点”和“利率” 等特性以推动订单成交,引入了 “富文本” 这一概念。富文本具备丰富格式的文本展示与编辑功能。然而,恰是由于富文本具有 “多样式”“复杂排版” 等特…

恒创科技:如何知道一台服务器能承载多少用户?

如何知道一台服务器能承载多少用户?其实服务器承载能力并非一个单一固定的数值,而是由多种因素共同决定的动态指标,所以想知道能承载的访客量,我们要先搞清楚究竟有哪些因素会影响服务器承载访客的数量。 影响服务器承载访客的因素&#xff…

vue3配置eslint代码规划和prettier自动格式化

eslint 安装依赖:npm install -D eslint/create-config初始化:npx eslint --init初始化后会在项目中自动创建eslint.config.js文件,把以下内容复制粘粘替换 import globals from "globals"; import pluginJs from "eslint/j…

6个步骤让你快速学会甘特图的制作

在项目管理中,一个清晰、详细的进度表格和进度计划表是确保项目顺利进行的重要工具。它们不仅帮助团队成员了解各自的任务和责任,还能有效监控项目的进展,及时发现并解决问题。 制作项目进度表格和制定项目进度计划表是项目管理中的关键步骤…

蒙特卡洛方法(MC Basic算法例子)

本文章中使用的算法和例子来源于bilibili中西湖大学赵世钰老师的【强化学习的数学原理】课程。网址:第5课-蒙特卡洛方法(MC Basic算法例子)_哔哩哔哩_bilibili 目录 一、任务目标 二、细节分析 三、代码演示 一、任务目标 1、初始的策略已…

数理统计(第4章第1节:1元方差分析)

目录 引例 基本概念 1元方差分析的数学模型 ​编辑离差平方和​编辑​编辑​编辑​编辑​编辑 单因子方差分析的假设检验​编辑 1元方差分析表 例子 引例 基本概念 1元方差分析的数学模型 离差平方和 单因子方差分析的假设检验 1元方差分析表 例子

Python酷库之旅-第三方库Pandas(192)

目录 一、用法精讲 891、pandas.Index.nunique方法 891-1、语法 891-2、参数 891-3、功能 891-4、返回值 891-5、说明 891-6、用法 891-6-1、数据准备 891-6-2、代码示例 891-6-3、结果输出 892、pandas.Index.value_counts方法 892-1、语法 892-2、参数 892-3、…

光控资本:普通股东、控股股东、大股东、实际控制人都是什么意思?

1、一般股东 一般股东是指持有公司一般股股份的出资者。一般股是指在公司的经营管理和盈利及财产的分配上享有一般权力的股份。 一般股的权力: 1、获得股利的权力。一般股股东在股市付出完债息、优先股股息后,能够获得股利,具体有多少要看…

SELS-SSL/TLS

一、了解公钥加密(非对称加密) 非对称加密中,用于加密数据的密钥与用于解密数据的密钥不同。私钥仅所有者知晓,而公钥则可自由分发。发送方使用接收方的公钥对数据进行加密,数据仅能使用相应的私钥进行解密。 你可以将…

openfoam中生成的3d案例提取得到slice后的2d案例

问题: 由于前期准备做3d的案例,并且模拟也比较费时间,现在生成了几十份3d的数据,但是现在只想要2d的数据来演示,该如何提取或者转换呢? 解决方法: 1.说明图片中的每个2d视图的points都是恒定不…

【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)

2024年人机交互与虚拟现实国际会议(HCIVR 2024) 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网:www.hcivr.org 2024 International Conference on Human-Computer Interaction and …