[go-zero] goctl 生成api和rpc

发布于:2024-07-01 ⋅ 阅读:(17) ⋅ 点赞:(0)

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的接口:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述