建站运营新闻深圳市工程交易中心
web/
2025/9/28 20:24:57/
文章来源:
建站运营新闻,深圳市工程交易中心,卢沟桥做网站的公司,比较好的前端网站文章目录 1.环境准备2.验证码服务2.1 kratos 初始化验证码服务项目2.2 使用 Protobuf 定义验证码生成接口2.3 业务逻辑代码实现 1.环境准备
protoc和protoc-gen-go插件安装和kratos工具安装 protoc下载 下载二进制文件#xff1a;https://github.com/protocolbuffers/protobu… 文章目录 1.环境准备2.验证码服务2.1 kratos 初始化验证码服务项目2.2 使用 Protobuf 定义验证码生成接口2.3 业务逻辑代码实现 1.环境准备
protoc和protoc-gen-go插件安装和kratos工具安装 protoc下载 下载二进制文件https://github.com/protocolbuffers/protobuf/releases 下拉到最下方下载系统对应的版本将解压出来bin目录下的protoc.exe拷贝到GOPATH的bin目录下。查看protoc版本protoc --version。 protoc-gen-go插件安装 protoc是针对所有语言开发的protoc-gen-go是专门针对go语言开发因为是使用go语言开发的所以直接使用go install就可以进行安装安装后在GOPATH的bin沐目录下就会有对应的二进制文件。go install google.golang.org/protobuf/cmd/protoc-gen-golatest版本验证protoc-gen-go --versiongo install google.golang.org/grpc/cmd/protoc-gen-go-grpclatest版本验证protoc-gen-go-grpc --version kratos工具安装 kratos也是go语言编写的帮助我们快速生成代码的直接go install安装即可安装完成也会在GOPATH的bin目录中生成二进制文件。安装命令go install github.com/go-kratos/kratos/cmd/kratos/v2latest版本验证kratos -v
2.验证码服务
2.1 kratos 初始化验证码服务项目
kratos new kratos-demo03PS E:\java\go_code kratos new kratos-demo03Creating service kratos-demo03, layout repo is https://github.com/go-kratos/kratos-layout.git, please wait a moment.Already up to date.CREATED E:\java\go_code\kratos-demo03\.gitignore (590 bytes)
CREATED E:\java\go_code\kratos-demo03\Dockerfile (483 bytes)
CREATED E:\java\go_code\kratos-demo03\LICENSE (1087 bytes)
CREATED E:\java\go_code\kratos-demo03\Makefile (2608 bytes)
CREATED E:\java\go_code\kratos-demo03\README.md (1113 bytes)
CREATED E:\java\go_code\kratos-demo03\api\helloworld\v1\error_reason.pb.go (5126 bytes)
CREATED E:\java\go_code\kratos-demo03\api\helloworld\v1\error_reason.proto (306 bytes)
CREATED E:\java\go_code\kratos-demo03\api\helloworld\v1\greeter.pb.go (8299 bytes)
CREATED E:\java\go_code\kratos-demo03\api\helloworld\v1\greeter.proto (711 bytes)
CREATED E:\java\go_code\kratos-demo03\api\helloworld\v1\greeter_grpc.pb.go (3667 bytes)
CREATED E:\java\go_code\kratos-demo03\api\helloworld\v1\greeter_http.pb.go (2213 bytes)
CREATED E:\java\go_code\kratos-demo03\cmd\kratos-demo03\main.go (1834 bytes)
CREATED E:\java\go_code\kratos-demo03\cmd\kratos-demo03\wire.go (645 bytes)
CREATED E:\java\go_code\kratos-demo03\cmd\kratos-demo03\wire_gen.go (1121 bytes)
CREATED E:\java\go_code\kratos-demo03\configs\config.yaml (306 bytes)
CREATED E:\java\go_code\kratos-demo03\go.mod (1301 bytes)
CREATED E:\java\go_code\kratos-demo03\go.sum (9022 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\biz\README.md (7 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\biz\biz.go (134 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\biz\greeter.go (1285 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\conf\conf.pb.go (21434 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\conf\conf.proto (805 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\data\README.md (8 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\data\data.go (500 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\data\greeter.go (880 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\server\grpc.go (867 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\server\http.go (872 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\server\server.go (158 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\service\README.md (11 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\service\greeter.go (723 bytes)
CREATED E:\java\go_code\kratos-demo03\internal\service\service.go (142 bytes)
CREATED E:\java\go_code\kratos-demo03\openapi.yaml (1169 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\README.md (15 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\errors\errors.proto (428 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\api\annotations.proto (1082 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\api\client.proto (3495 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\api\field_behavior.proto (3090 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\api\http.proto (15515 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\api\httpbody.proto (2748 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\any.proto (6067 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\api.proto (7942 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\compiler\plugin.proto (8937 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\descriptor.proto (39418 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\duration.proto (5011 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\empty.proto (2481 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\field_mask.proto (8430 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\source_context.proto (2389 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\struct.proto (3874 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\timestamp.proto (6606 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\type.proto (6313 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\google\protobuf\wrappers.proto (4165 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\openapi\v3\annotations.proto (2254 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\openapi\v3\openapi.proto (22754 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\validate\README.md (84 bytes)
CREATED E:\java\go_code\kratos-demo03\third_party\validate\validate.proto (32133 bytes) Project creation succeeded kratos-demo03
$ cd kratos-demo03
$ go generate ./...
$ go build -o ./bin/ ./...
$ ./bin/kratos-demo03 -conf ./configs Thanks for using Kratos Tutorial: https://go-kratos.dev/docs/getting-started/start Thanks for using Kratos Tutorial: https://go-kratos.dev/docs/getting-started/start# 进入项目目录拉取依赖\
cd kratos-demo03
go mod tidy# 安装wire工具kratos使用了依赖注入来生成相关的代码所以运行项目前也需要安装
go get github.com/google/wire/cmd/wire# 生成了wire_gen.go
go generate ./...# 项目运行
kratos run以上的layout的目录布局仅仅是kratos推荐的项目目录布局方式 2.2 使用 Protobuf 定义验证码生成接口
定义 protobuf 文件说明接口利用 protoc 基于 protobuf 生成必要代码将生成的代码整合到项目中完善业务逻辑
kratos proto add api/verifyCode/verifyCode.protosyntax proto3;package api.verifyCode;
// 生成的go代码所在的包
option go_package kratos-demo03/api/verifyCode;verifyCode;
// 定义 VerifyCode 服务
service VerifyCode {rpc GetVerifyCode (GetVerifyCodeRequest) returns (GetVerifyCodeReply);
}
// 类型常量
enum TYPE {DEFAULT 0;DIGIT 1;LETTER 2;MIXED 3;
};
// 定义 GetVerifyCodeRequest 消息
message GetVerifyCodeRequest {// 验证码长度uint32 length 1;// 验证码类型TYPE type 2;}
// 定义 GetVerifyCodeReply 消息
message GetVerifyCodeReply {// 生成的验证码string code 1;
}基于verifyCode.proto生成 clientStub相关代码
kratos proto client api/verifyCode/verifyCode.protoapi/verifyCode/verifyCode.pb.go类型定义代码api/verifyCode/verifyCode_grpc.pb.gogRPC服务定义代码 基于verifyCode.proto文件生成 grpc服务代码
kratos proto server api/verifyCode/verifyCode.proto -t internal/service-t 选项指定生成文件所在位置代码会生成在internal/service目录中的internal/service/verifycode.gointernal/service/verifycode.go该文件定义了最基本的 VerifyCode 服务和对应的 GetVerifyCode 方法 package serviceimport (contextpb kratos-demo03/api/verifyCode
)type VerifyCodeService struct {pb.UnimplementedVerifyCodeServer
}func NewVerifyCodeService() *VerifyCodeService {return VerifyCodeService{}
}func (s *VerifyCodeService) GetVerifyCode(ctx context.Context, req *pb.GetVerifyCodeRequest) (*pb.GetVerifyCodeReply, error) {return pb.GetVerifyCodeReply{}, nil
}将生成的服务代码注册到 gRPC 服务中
更新 internal/service/service.go 文件告知 wire 依赖注入系统如果需要 VerifyCodeService 的话使用NewVerifyCodeService 函数来构建
将 VerifyCodeService 注册到 gRPC 服务中
更新 internal/server/grpc.go 文件
package serverimport (v1 kratos-demo03/api/helloworld/v1kratos-demo03/api/verifyCodekratos-demo03/internal/confkratos-demo03/internal/servicegithub.com/go-kratos/kratos/v2/loggithub.com/go-kratos/kratos/v2/middleware/recoverygithub.com/go-kratos/kratos/v2/transport/grpc
)// NewGRPCServer new a gRPC server.
func NewGRPCServer(c *conf.Server, greeter *service.GreeterService, verifyCodeService *service.VerifyCodeService, logger log.Logger) *grpc.Server {var opts []grpc.ServerOption{grpc.Middleware(recovery.Recovery(),),}if c.Grpc.Network ! {opts append(opts, grpc.Network(c.Grpc.Network))}if c.Grpc.Addr ! {opts append(opts, grpc.Address(c.Grpc.Addr))}if c.Grpc.Timeout ! nil {opts append(opts, grpc.Timeout(c.Grpc.Timeout.AsDuration()))}srv : grpc.NewServer(opts...)v1.RegisterGreeterServer(srv, greeter)verifyCode.RegisterVerifyCodeServer(srv, verifyCodeService)return srv
}生成依赖注入代码go generate ./... kratos run建立ApiPost的项目 2.3 业务逻辑代码实现
GetVerifyCode方法中添加code返回添加RandCode方法返回测试字符串resultkratos启动测试
package serviceimport (contextpb kratos-demo03/api/verifyCode
)type VerifyCodeService struct {pb.UnimplementedVerifyCodeServer
}func NewVerifyCodeService() *VerifyCodeService {return VerifyCodeService{}
}func (s *VerifyCodeService) GetVerifyCode(ctx context.Context, req *pb.GetVerifyCodeRequest) (*pb.GetVerifyCodeReply, error) {return pb.GetVerifyCodeReply{Code: RandCode(int(req.Length), req.Type),}, nil
}func RandCode(l int, t pb.TYPE) string {return result
}// RandCode 开放的被调用的方法用于区分类型
func RandCode(l int, t pb.TYPE) string {switch t {case pb.TYPE_DEFAULT:fallthroughcase pb.TYPE_DIGIT:return randCode(0123456789, l)case pb.TYPE_LETTER:return randCode(abcdefghijklmnopqrstuvwxyz, l)case pb.TYPE_MIXED:return randCode(0123456789abcdefghijklmnopqrstuvwxyz, l)}return
}// randCode 随机的核心方法
func randCode(chars string, l int) string {charsLen : len(chars)result : make([]byte, l)for i : 0; i l; i {// 核心函数 生成[0,n]的整型随机数randIndex : rand.Intn(charsLen)result[i] chars[randIndex]}return string(result)
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83513.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!