文章目录
- 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@latestgoctl env check -i -f --verbosego install google.golang.org/protobuf/cmd/protoc-gen-go@v1.26go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
3.生成 api
goctl api new api
logic/apilogic.go
package logicimport ("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.Loggerctx context.ContextsvcCtx *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 linereturn &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的接口: