go-zero快速开始
go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。
架构图

框架设计
轻松获得支撑千万日活服务的稳定性,内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力,无需配置和额外代码,微服务治理中间件可无缝集成到其它现有框架使用,极简的 API 描述,一键生成各端代码,自动校验客户端请求参数合法性,大量微服务治理和并发工具包。
框架特点
强大的工具支持,尽可能少的代码编写,极简的接口,完全兼容 net/http,支持中间件,方便扩展,高性能,面向故障编程,弹性设计,内建服务发现、负载均衡,内建限流、熔断、降载,且自动触发,自动恢复,API 参数自动校验,超时级联控制,自动缓存控制,链路跟踪、统计报警等,高并发支撑,稳定保障了疫情期间每天的流量洪峰。
快速开始
goctl 是 go-zero 的内置脚手架,是提升开发效率的一大利器,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。
1
2
3
4
5
|
# 创建工作空间并进入该目录
$ mkdir -p ~/workspace/api && cd ~/workspace/api
# 执行指令生成 demo 服务
$ goctl api new demo
Done.
|
启动服务
1
2
3
4
5
6
|
# 进入服务目录
$ cd ~/workspace/api/demo
# 整理依赖文件
$ go mod tidy
# 启动 go 程序
$ go run demo.go
|
1
2
3
4
5
|
# 创建工作空间并进入该目录
$ mkdir -p ~/workspace/rpc && cd ~/workspace/rpc
# 执行指令生成 demo 服务
$ goctl rpc new demo
Done.
|
启动服务
1
2
3
4
5
6
|
# 进入服务目录
$ cd ~/workspace/rpc/demo
# 整理依赖文件
$ go mod tidy
# 启动 go 程序
$ go run demo.go
|
http服务demo
一个简单的 HTTP 服务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
func main() {
var restConf rest.RestConf
conf.MustLoad("etc/helloworld.yaml", &restConf)
s, err := rest.NewServer(restConf)
if err != nil {
log.Fatal(err)
return
}
s.AddRoute(rest.Route{ // 添加路由
Method: http.MethodGet,
Path: "/hello/world",
Handler: func(writer http.ResponseWriter, request *http.Request) { // 处理函数
httpx.OkJson(writer, "Hello World!")
},
})
defer s.Stop()
s.Start() // 启动服务
}
|
配置文件etc/helloworld.yaml
1
2
3
|
Name: HelloWorld.api
Host: 127.0.0.1
Port: 8080
|
grpc服务demo
一个 rpc server 服务示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
func main() {
var serverConf zrpc.RpcServerConf
conf.MustLoad("etc/greet-server.yaml", &serverConf)
s := zrpc.MustNewServer(serverConf, func(server *grpc.Server) {
greet.RegisterGreetServer(server, &exampleServer{})
})
defer s.Stop()
s.Start()
}
type exampleServer struct {
greet.UnimplementedGreetServer
}
func (e *exampleServer) Ping(ctx context.Context, request *greet.Request) (*greet.Response, error) {
// fill your logic here
return &greet.Response{}, nil
}
|
配置文件etc/greet-server.yaml
1
2
|
Name: greet.rpc
ListenOn: 127.0.0.1:8080
|