什么是grpc
在 gRPC 中,客户端应用程序可以像本地对象一样直接调用不同机器上的服务器应用程序上的方法,使您可以更轻松地创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 是基于定义服务的想法,指定可以使用其参数和返回类型远程调用的方法。在服务端,服务端实现了这个接口,运行一个gRPC服务端来处理客户端调用。在客户端,客户端有一个存根(在某些语言中简称为客户端),它提供与服务器相同的方法。
上代码和工具
protobuf 协议编译工具github下载地址: https://github.com/protocolbuffers/protobuf win直接下载exe包,环境变量配置一下即可使用。 protoc-gen-go 这是protobuf编译成go调用的模块 protoc-gen-go-grpc 基于grpc框架 安装(版本根据环境适配): $ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
普通rpc,*.proct文件示例
user.proto
//指定当前protoc 版本语法2/3 syntax = "proto3"; //生成*.pb.go文件路径 option go_package = "../service"; package service; //对象 message User { string username = 1; int32 age = 2; }
//编译为*.pb.go文件 protoc --go_out=. .\user.proto --go_out //指定输出pb.go文件路径,由于我们proto文件里已经定义。所以就为.了
mian.go
package main import ( "dogrpc/service" "fmt" "google.golang.org/protobuf/proto" ) func main(){ user := &service.User{ Username: "ye", Age: 26, } //序列化 xlhRel, err := proto.Marshal(user) if err != nil { panic(err) } //反序列化 newUser := &service.User{} err = proto.Unmarshal(xlhRel, newUser) if err != nil { panic(err) } fmt.Println(newUser.String()) }