下载工具
https://github.com/protocolbuffers/protobuf/releases
对应系统下载即可
- protoc-3.xx.0-win64.zip
- protoc-3.xx.0-linux-x86_64.zip
注意:protoc 的版本需要和 golang/protobuf 保持一致 (尽量自己去下载最新的版本)
下载完成后解压后记得将路径添加到环境变量中
下载 go 的依赖包
1
| go get github.com/golang/protobuf/protoc-gen-go
|
proto 文件
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| syntax = "proto3";
option go_package = "/.;proto";
service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); }
message HelloRequest { string name = 1; }
message HelloReply { string message = 1; }
|
生成 go 文件
1
| protoc -I . goods.proto --go_out=plugins=grpc:.
|
![image-20220119003211761]()
服务端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| package main
import ( "context" "demo1/grpc_start/proto" "google.golang.org/grpc" "net" )
type Server struct{}
func (s *Server) SayHello(ctx context.Context, request *proto.HelloRequest) (*proto.HelloReply, error) { return &proto.HelloReply{ Message: "hello " + request.Name, }, nil }
func main() { g := grpc.NewServer() proto.RegisterGreeterServer(g, &Server{}) listener, err := net.Listen("tcp", "localhost:8080") if err != nil { panic("failed Listen:" + err.Error()) } err = g.Serve(listener) if err != nil { panic("failed to start grpc:" + err.Error()) } }
|
客户端
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package main
import ( "context" "demo1/grpc_start/proto" "fmt" "google.golang.org/grpc" )
func main() { conn, err := grpc.Dial("localhost:8080", grpc.WithInsecure()) if err != nil { panic(err) } defer conn.Close() c := proto.NewGreeterClient(conn) r, err := c.SayHello(context.Background(), &proto.HelloRequest{Name: "likfees"}) fmt.Println(r.Message) }
|
测试
![image-20220119003352585]()