Go-Zero是一个Web和RPC框架,具有许多内置的工程实践。它的诞生是为了通过弹性设计确保繁忙服务的稳定性,多年来一直为拥有数千万用户的网站提供服务。
中文 |简体中文
go-zero(列在CNCF Landscape:https://landscape.cncf.io/?selected=go-zero)是一个Web和RPC框架,具有许多内置的工程实践。它的诞生是为了通过弹性设计确保繁忙服务的稳定性,多年来一直为拥有数千万用户的网站提供服务。
go-zero 包含简单的 API 描述语法和代码生成工具,称为 .你可以使用.api文件生成Go,iOS,Android,Kotlin,Dart,TypeScript,JavaScript。
goctl
goctl
在2018年初,我们决定重新设计我们的系统,从Java+MongoDB的单体架构到微服务架构。经过研究和比较,我们选择:
通过设计微服务架构,我们希望确保稳定性和生产力。从一开始,我们就拥有以下设计原则:
时隔近半年,我们完成了从单体系统到微服务系统的转移,并于 2018 年 8 月部署。新系统保证了业务增长和系统稳定性。
Go-Zero是一个Web和RPC框架,集成了许多工程实践。功能主要如下:
如下,go-zero 通过几层和机制保护系统:
在项目下运行以下命令:
go get -u github.com/zeromicro/go-zero
完整的示例可以从下面查看:
安装 goctl
goctl可以读作 。 意味着不被代码控制,相反,我们控制它。里面不是.一开始,我期望它能帮助我们提高生产力,让我们的生活更轻松。
go control
goctl
go
golang
# for Go
go install github.com/zeromicro/go-zero/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是可执行的。
创建 API 文件,像 greet.api 一样,可以在 VS 代码中安装 goctl 的插件,支持 API 语法。
type (
Request {
Name string `path:"name,options=[you,me]"` // parameters are auto validated
}
Response {
Message string `json:"message"`
}
)
service greet-api {
@handler GreetHandler
get /greet/from/:name(Request) returns (Response)
}
.api文件也可以由goctl生成,如下所示:
goctl api -o greet.api
生成 go 服务器端代码
goctl api go -api greet.api -dir greet
生成的文件如下所示:
├── greet
│ ├── etc
│ │ └── greet-api.yaml // configuration file
│ ├── greet.go // main file
│ └── internal
│ ├── config
│ │ └── config.go // configuration definition
│ ├── handler
│ │ ├── greethandler.go // get/put/post/delete routes are defined here
│ │ └── routes.go // routes list
│ ├── logic
│ │ └── greetlogic.go // request logic can be written here
│ ├── svc
│ │ └── servicecontext.go // service context, mysql/redis can be passed in here
│ └── types
│ └── types.go // request/response defined here
└── greet.api // api description file
the generated code can be run directly:
cd greet
go mod init
go mod tidy
go run greet.go -f etc/greet-api.yaml
by default, it’s listening on port 8888, while it can be changed in the configuration file.
you can check it by curl:
curl -i http://localhost:8888/greet/from/you
the response looks like below:
HTTP/1.1 200 OK
Date: Sun, 30 Aug 2020 15:32:35 GMT
Content-Length: 0
编写业务逻辑代码
仅从api文件生成Java,TypeScript,Dart,JavaScript等代码
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...
通过 https://discord.gg/4JQvC5A4Fe 加入聊天
go-zero已加入CNCF云原生环境。
如果你喜欢或正在使用此项目来学习或启动你的解决方案,请给它一颗星。谢谢!