1. 下载工具
如果觉得下载较慢可以点击这里下载:
protoc-21.3-linux-x86_64.zip
protoc-21.3-win64.zip
下载完成后解压后记得将路径添加到环境变量中
2. 下载go的依赖包
go get github.com/golang/protobuf/protoc-gen-go
3. proto文件
syntax = "proto3";option go_package = ".;proto";service Greeter {rpc SayHello (HelloRequest) returns (HelloReply);}message HelloRequest {string name = 1;}message HelloReply {string message = 1;}
4. 生成go文件
protoc -I . helloworld.proto --go_out=plugins=grpc:.
5. 服务端代码
package mainimport ("context""fmt""google.golang.org/grpc""grpc_demo/hello""net")type Server struct {}func (s *Server) SayHello(ctx context.Context,request *hello.HelloRequest)(*hello.HelloReply,error){return &hello.HelloReply{Message:"Hello "+request.Name},nil}func main() {g := grpc.NewServer()s := Server{}hello.RegisterGreeterServer(g,&s)lis, err := net.Listen("tcp", fmt.Sprintf(":8080"))if err != nil {panic("failed to listen: "+err.Error())}g.Serve(lis)}
6. 客户端
package mainimport ("context""fmt""google.golang.org/grpc""grpc_demo/proto")func main() {conn,err := grpc.Dial("127.0.0.1:8080",grpc.WithInsecure())if err!=nil{panic(err)}defer conn.Close()c := hello.NewGreeterClient(conn)r,err := c.SayHello(context.Background(),&hello.HelloRequest{Name:"bobby"})if err!=nil{panic(err)}fmt.Println(r.Message)}
