gozero--环境安装和api语法


前言

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 ping
    get /ping

    // 定义只有请求体的接口,如更新信息
    @handler update
    post /update (UpdateReq)

    // 定义只有响应体的结构,如获取全部信息列表
    @handler list
    get /list returns ([]ListItem)

    // 定义有结构体和响应体的接口,如登录
    @handler login
    post /login (LoginReq) returns (LoginResp)

    // 定义表单请求
    @handler formExample
    post /form/example (FormExampleReq)

    // 定义 path 参数
    @handler pathExample
    get /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 ping
    get /ping

    // 定义只有请求体的接口,如更新信息
    @handler update
    post /update (UpdateReq)

    // 定义只有响应体的结构,如获取全部信息列表
    @handler list
    get /list returns ([]ListItem)

    // 定义有结构体和响应体的接口,如登录
    @handler login
    post /login (LoginReq) returns (LoginResp)

    // 定义表单请求
    @handler formExample
    post /form/example (FormExampleReq)

    // 定义 path 参数
    @handler pathExample
    get /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 ping
    get /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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小雨凉如水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值