gRPC|gRPC go安装教程

安装protobuf
go get -u github.com/golang/protobuf/proto
go get -u github.com/golang/protobuf/protoc-gen-go
此时会生成protoc-gen-go,protoc一般是获取已经编译好的可执行文件(https://github.com/google/protobuf/releases)
linux需要将protoc-gen-go放到/usr/bin/,windows因为$GOPATH/bin已经加到PATH中了所以可以直接找到
安装gRPC
go get -u google.golang.org/grpc
不过由于国内的网络原因上面的命令可能不会成功
执行下面的多条命令来代替
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
【gRPC|gRPC go安装教程】git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
如果 $GOPATH中有多个路径,请手动替换成其中一个。

测试案例
HelloService.proto和之前C++编译教程的一样
生成命令如下:
protoc HelloService.proto-I . --go_out=. 这个是仅仅生成protobuf的产物
protoc HelloService.proto-I . --go_out=plugins=grpc:.
生成的HelloService.pb.go 需要改成package main
server.go

1 package main 2 3 import ( 4"context" 5"fmt" 6"net" 7 8"google.golang.org/grpc" 9 ) 10 11 type HelloServiceServerImpl struct { 12 } 13 14 func (s *HelloServiceServerImpl) SayHello(c context.Context, req *Request) (*Response, error) { 15fmt.Printf("%s\n", string(req.Data)) 16 17resp := Response{} 18resp.Data = https://www.it610.com/article/[]byte("hello from server") 19 20return &resp, nil 21 } 22 23 func main() { 24lis, err := net.Listen("tcp", "127.0.0.1:57501") 25if err != nil { 26fmt.Println(err) 27return 28} 29s := grpc.NewServer() 30RegisterHelloServiceServer(s, &HelloServiceServerImpl{}) 31fmt.Printf("Server listening on 127.0.0.1:57501\n") 32s.Serve(lis) 33 }

client.go
1 package main 2 3 import ( 4"context" 5"fmt" 6 7"google.golang.org/grpc" 8 ) 9 10 func main() { 11conn, err := grpc.Dial("127.0.0.1:57501", grpc.WithInsecure()) 12if err != nil { 13fmt.Println(err) 14} 15client := NewHelloServiceClient(conn) 16r, err := client.SayHello(context.Background(), &Request{Data: []byte("send from client")}) 17fmt.Printf("%s\n", string(r.Data)) 18 }

使用go build -o client HelloService.pb.go client.go编译
C++版本的服务器gRPC|gRPC go安装教程
文章图片

Go客户端gRPC|gRPC go安装教程
文章图片


转载于:https://www.cnblogs.com/skyend/p/10838205.html

    推荐阅读