文章目录
- 1.goctl 概述
- 2.go-zero 需要安装的组件
- 3.生成 api
- 4.生成 rpc
1.goctl 概述
goctl支持多种rpc,较为流行的是google开源的grpc,这里主要介绍goctl rpc protoc的代码生成与使用。protoc是grpc的命令,作用是将proto buffer文件转化为相应语言的代码。
goctl 是 go-zero 的内置脚手架,是提升开发效率的一大利器,可以一键生成代码、文档、部署 k8s yaml、dockerfile 等。
goctl安装:
go install github.com/zeromicro/go-zero/tools/goctl@latest
go-zero框架设计:
客户端 -> Api -> Service -> 缓存 -> Db
- 客户端: IOS, Android, web, PC
- Api: Http, 鉴权, 加密, 日志, 异常捕获, 监控, 数据统计, 并发, 链路跟踪, 超时, 熔断, 降级
- Service: gRPC, 缓存, 日志, 异常捕获, 监控, 数据统计, 并发, 链路跟踪, 超时, 熔断, 降级
2.go-zero 需要安装的组件
- protoc
- protoc-gen-go
- protoc-gen-go-grpc
- goctl
Protobuf下载安装:
https://github.com/protocolbuffers/protobuf/releases
将下载的文件解压,将解压后的bin目录加入到环境变量的path下。
下载 goctl, proto-gen-go, proto-gen-go-grpc:
go install github.com/zeromicro/go-zero/tools/goctl@latest
goctl env check -i -f --verbose
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
3.生成 api
goctl api new api
logic/apilogic.go
package logic
import (
"context"
"go-zero-demo01/user/api/internal/svc"
"go-zero-demo01/user/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type ApiLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewApiLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ApiLogic {
return &ApiLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *ApiLogic) Api(req *types.Request) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return &types.Response{
Message: "api success",
}, nil
}
cd api
go mod tidy
go run api.go
4.生成 rpc
goctl rpc new user
或者直接提供goland中的goctl的插件生成rpc的结构。
user.proto
syntax = "proto3";
package user;
option go_package = './user';
message UserReq {
string id = 1;
}
message UserResp {
string id = 1;
string name = 2;
}
service User {
rpc getUser(UserReq) returns (UserResp);
}
etcd:
go run user.go
利用apifox打开grpc的接口: