go-kit
从go-zero仓库fork而来,在继承go-zero众多特性的同时,会在此基础上做一些适配我们自己业务的二次开发。
1. Installation
在项目目录下通过如下命令安装:
GO111MODULE=on GOPROXY=https://goproxy.cn/,direct
go get -u github.com/graydance/go-kit
2. Quick Start
-
完整示例请查看
快速构建高并发微服务
快速构建高并发微服务 - 多 RPC 版
-
安装 goctl 工具
goctl
读作 go control
,不要读成 go C-T-L
。goctl
的意思是不要被代码控制,而是要去控制它。其中的 go
不是指 golang
。在设计 goctl
之初,我就希望通过 工具
来解放我们的双手👈
# Go 1.15 及之前版本
GO111MODULE=on GOPROXY=https://goproxy.cn/,direct
go get -u github.com/graydance/go-kit/tools/goctl@latest
# Go 1.16 及以后版本
GOPROXY=https://goproxy.cn/,direct
go install github.com/graydance/go-kit/tools/goctl@latest
# For Mac
brew install goctl
# docker for amd64 architecture
docker pull kevinwan/goctl
# run goctl like
docker run --rm -it -v `pwd`:/app kevinwan/goctl goctl --help
# docker for arm64 (M1) architecture
docker pull kevinwan/goctl:latest-arm64
# run goctl like
docker run --rm -it -v `pwd`:/app kevinwan/goctl:latest-arm64 goctl --help
要特别注意的是,goctl必须从graydance/go-kit仓库安装,而不是从go-zero仓库安装。这是因为go-kit里的goctl做了改造
其可以适配我们自已的开发与生产环境。 关于api文件的声明参考:goctl使用说明
-
快速生成 api 服务
goctl api new greet
cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml
默认侦听在 8888
端口(可以在配置文件里修改),可以通过 curl
请求:
curl -i http://localhost:8888/from/you
返回如下:
HTTP/1.1 200 OK
Content-Type: application/json
Date: Thu, 22 Oct 2020 14:03:18 GMT
Content-Length: 14
{"message":""}
编写业务代码:
- api 文件定义了服务对外 HTTP 接口,可参考 api 规范
- 可以在
servicecontext.go
里面传递依赖给 logic,比如 mysql, redis 等
- 在 api 定义的
get/post/put/delete
等请求对应的 logic 里增加业务处理逻辑
-
可以根据 api 文件生成前端需要的 Java, TypeScript, Dart, JavaScript 代码
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...
3. 文档
3.1. yapi同步步骤
- 安装goctl-swagger插件
GOPROXY=https://goproxy.cn/,direct go install github.com/graydance/goctl-swagger@latest
- 添加goctl-swagger到环境变量
export PATH=$PATH:$GOPATH/bin/
- 安装yapi-cli工具
npm install -g yapi-cli
- 使用goctl-swagger生成swagger文档(可选步骤)
goctl api plugin -plugin goctl-swagger="swagger -filename user.json" -api user.api -dir .
-
配置yapi服务的token
在$HOME/.docrc目录下创建app.json文件,加入如下配置
{
"server": "http://yapi.linkr.bio/",
"apps" : {
"demo-api": {
"type": "swagger",
"token": "17fba0027f300248b804",
"appDir": "/apps/demo-api/",
"merge": "normal"
}
}
}
其中各个配置项说明如下:
server : 表示yapi服务器的地址
apps : 表示一组app,每一个对应yapi里的项目
demo-api : 表示项目名,这个在同步工具中要用到的,注意:这个名字必须可以找到{appDIr}/demo-api.api文件
type: 文档类型,目前yapi只支持swagger
token: 每个项目中openapi的token, 从项目api > 配置中复杂,每个项目token不一样
appDir: 这个是工程的根目录,按照规范,.api文件一定是在根目录下
merge: 合并方式,normal-如果已经存在不导入 good-已存在的接口,将合并返回数据的response, mergin-完全覆盖
-
一件更新api文档到yapi
goctl doc -push yapi -app demo-api
4. 支持Cloud Run
1. 触发器需要设置自定义环境变量
_DEPLOY_REGION : 发布地区
_SERVICE_NAME : 服务名
5. 开发规范
这个开发规范目前主要针对Golang的项目,分为以下几个部分:
- 工程规范
- 编码规范
- 测试规范
- 发布规范