作者:kevwan
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端 的稳定性,经受了充分的实战检验。
go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。
使用 go-zero 的好处:
18 年初,晓黑板后端在经过频繁的宕机后,决定从Java+MongoDB的单体架构迁移到微服务架构
,经过仔细思考和对比,我们决定:
对于微服务框架 的设计,我们期望保障微服务稳定性的同时,也要特别注重研发效率。所以设计之初,我们就有如下一些准则:
我们经历不到半年时间,彻底完成了从Java+MongoDB到Golang+MySQL为主的微服务体系迁移,并于 18 年 8 月底完全上线,稳定保障了晓黑板后续增长,确保了整个服务的高可用。
go-zero 是一个集成了各种工程实践的包含 web 和 rpc 框架,有如下主要特点:
如下图,我们从多个层面保障了整体服务的高可用:
在项目目录下通过如下命令安装:
go get -u github.com/tal-tech/go-zero
go build tools/goctl/goctl.go
把 goctl 放到 $PATH 的目录下,确保 goctl 可执行
goctl插件,支持 api 语法type Request struct {
Name string `path:"name,options=you|me"` // 框架自动验证请求参数是否合法
}
type Response struct {
Message string `json:"message"`
}
service greet-api {
@server(
handler: GreetHandler
)
get /greet/from/:name(Request) returns (Response);
}
也可以通过 goctl 生成 api 模本文件,命令如下:
goctl api -o greet.api
goctl api go -api greet.api -dir greet
生成的文件结构 如下:
├── greet
│ ├── etc
│ │ └── greet-api.json // 配置文件
│ ├── greet.go // main文件
│ └── internal
│ ├── config
│ │ └── config.go // 配置定义
│ ├── handler
│ │ ├── greethandler.go // get/put/post/delete等路由定义文件
│ │ └── routes.go // 路由列表
│ ├── logic
│ │ └── greetlogic.go // 请求逻辑处理文件
│ ├── svc
│ │ └── servicecontext.go // 请求上下文,可以传入mysql, redis等依赖
│ └── types
│ └── types.go // 请求、返回等类型定义
└── greet.api // api描述文件
生成的代码可以直接运行:
cd greet
go run greet.go -f etc/greet-api.json
默认侦听在 8888 端口(可以在配置文件里修改),可以通过 curl 请求:
➜ go-zero git:(master) curl -w "\ncode: %{http_code}\n" http://localhost:8888/greet/from/kevin
{"code":0}
code: 200
编写业务代码:
goctl api java -api greet.api -dir greet
goctl api dart -api greet.api -dir greet
...
https://github.com/tal-tech/go-zero
扫码加入微信交流群
https://weixin.qq.com/g/AQYAAP0fvDwLxiploAtybIDOXGrrCWQY5Awx0Q2w973IVc6RWJhtWBwJKf2Yr2tB (二维码自动识别)
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...