go-zero快速入门
go-zero 介绍
go-zero是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。
go-zero 包含简单的 API 描述语法和名为 的代码生成工具。您可以使用 .goctl
goctl
go-zero 的优点:
- 提高日活跃用户数千万的服务的稳定性
- 内置链式超时控制、并发控制、限速、自适应熔断、自适应减载,甚至无需配置
- 内置中间件也可以集成到您的框架中
- 简单的 API 语法,一个命令生成几种不同的语言
- 自动验证来自客户端的请求参数
- 大量内置微服务管理和并发工具包
go-zero 框架背景
- 基于 Go 语言
- 高效的性能
- 简洁的语法
- 广泛验证的工程效率
- 部署简单
go-zero 框架设计
对于微服务框架的设计,保障微服务稳定性,同时也要特别注重研发效率,有一些准则:
- 保持简单,第一原则
- 弹性设计,面向故障编程
- 工具大于约定和文档
- 高可用、高并发、易扩展
- 对业务开发友好,封装复杂度
- 约束做一件事只有一种方式
go-zero 特点
go-zero 是一个集成了各种工程实践的包含 web 和 rpc 框架,有如下主要特点:
- 强大的工具支持,尽可能少的代码编写
- 高可用
- 高并发支撑
如下图,我们从多个层面保障了整体服务的高可用:
使用 go-zero 的基本示例
-
安装 goctl 工具
goctl
读作go control
,不要读成go C-T-L
。goctl
的意思是不要被代码控制,而是要去控制它。其中的go
不是指golang
。GOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest
确保 goctl 可执行,并且在 $PATH 环境变量里。
-
创建 API 文件,如 greet.api,可以安装 goctl 的插件,支持 API 语法。
type Request struct { Name string `path:"name,options=you|me"` // parameters are auto validated } type Response struct { 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
生成的代码可以直接运行:
cd greet go mod init go mod tidy go run greet.go -f etc/greet-api.yaml
默认情况下,它监听端口 8888,但可以在 Configuration File 中更改。
您可以通过 curl 检查它:
curl -i http://localhost:8888/greet/from/you
响应如下所示:
HTTP/1.1 200 OK Date: Sun, 30 Aug 2020 15:32:35 GMT Content-Length: 0
-
编写业务逻辑代码
- 依赖项可以传递到 ServiceContext.go 中的逻辑中,如 MySQL、Redis 等。
- 根据 .api 文件在 logic package 中添加 logic code
-
goctl
插件插件 用途 goctl-swagger 一键生成 api
的swagger
文档
原文地址:https://blog.csdn.net/m0_66316879/article/details/143987573
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!