环境配置
一、安装protobuf编译器
在 https://github.com/protocolbuffers/protobuf/releases 这个网址中根据自己的操作系统下载对应的protobuf编译器
二、安装grpc包
go get -u google.golang.org/grpc
三、安装protoc转go的插件
进入$GOPATH/src/google.golang.org/grpc/cmd/protoc-gen-go-grpc
目录下,运行下面的命令生成protoc-gen-go-grpc.exe
可执行文件
go build
go install
进入$GOPATH/src/google.golang.org/protobuf/cmd/protoc-gen-go
目录下,运行下面的命令生成protoc-gen-go.exe
可执行文件
go build
go install
GRPC测试
一、编写add.proto
文件
syntax = "proto3";
package my_add;
option go_package = ".;add";
service AddService {
rpc addInt(AddRequest) returns (AddIntReply) {}
}
message AddRequest {
int32 a = 1;
int32 b = 2;
}
message AddIntReply {
int32 res = 1;
}
二、进入add.proto
文件所在的位置,输入如下命令
protoc.exe --go_out=. --go-grpc_out=. add.proto
这时会在同级目录下生成add.pb.go
、add_grpc.pb.go
文件。
三、新建service
文件夹,编写服务端程序并运行
package main
import (
"context"
"fmt"
"getcharzp.cn/test/grpc-test/my-add" // 这个包即就是add.bp.go文件所在的包
"google.golang.org/grpc"
"net"
)
type MyService struct {
myAdd.UnimplementedAddServiceServer
}
func (s *MyService) AddInt(ctx context.Context, req *myAdd.AddRequest) (*myAdd.AddIntReply, error){
res := add(req.GetA(), req.GetB())
return &myAdd.AddIntReply{Res:res}, nil
}
func add(a, b int32) int32 {
return a + b
}
func main() {
fmt.Println("the server run at 9999 ...")
s,_:= net.Listen("tcp", ":9999")
myService := MyService{}
grpcServer := grpc.NewServer()
myAdd.RegisterAddServiceServer(grpcServer, &myService)
_ = grpcServer.Serve(s)
}
四、新建client
文件夹,编写客户端程序并运行,这时的客户端就是通过RPC的方式对服务端的方法进行的调用
package main
import (
"context"
"fmt"
"getcharzp.cn/test/grpc-test/my-add" // 这个包即就是add.bp.go文件所在的包
"google.golang.org/grpc"
"log"
)
func main() {
conn,_ := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())
c := myAdd.NewAddServiceClient(conn)
req := myAdd.AddRequest{
A: 99,
B: 98,
}
reply, err := c.AddInt(context.Background(), &req)
if err != nil {
log.Println(err)
}
fmt.Println(reply.GetRes())
}