这篇文章假设你已经装好proto需要的三个插件

网上的教程多多少少都有点问题,研究了半天终于跑通了,这里记录下
1 .先建个空的go module项目
2. 新建文件夹pb,新建hello.proto
//定义proto版本
syntax = "proto3";
//定义包名
package pb;
//定义生成的go文件的包名"路径;别名"
option go_package = "./pb";

//类似于go的结构体
message Req {
  string message = 1;
}

message Res {
  string message = 1;
}

//定义服务器
service SayHi{
  //定义rpc服务
 rpc Hello (Req) returns (Res);
}

终端进到pb文件夹下运行

protoc --go_out=. --go_opt=paths=source_relative   --go-grpc_out=. --go-grpc_opt=paths=source_relative    ./hello.proto

会生成两文件

3. 新建服务端文件server/server.go
package main

import (
   "awesomeProject/pb"
 "context"
 "log"
 "net"

 "google.golang.org/grpc"
)

//定义一个服务结构体
type Server struct {
   pb.UnimplementedSayHiServer
}

//定义服务方法
func (s *Server) Hello(c context.Context, in *pb.Req) (*pb.Res, error) {
   log.Println(in.Message)
   return &pb.Res{Message: "服务器发送的信息"}, nil
}

func main() {
   //监听端口
 listen, err := net.Listen("tcp", ":9999")
   if err != nil {
      log.Println(err)
      return
 }
   //注册grpc服务
 s := grpc.NewServer()
   //注册服务方法
 pb.RegisterSayHiServer(s, &Server{})
   //开启grpc服务
 s.Serve(listen)
}

运行起来

4.新建客户端文件client/clinet.gp
package main

import (
   "awesomeProject/pb"
 "context"
 "log"

 "google.golang.org/grpc"
)

func main() {
   //建立连接
 conn, err := grpc.Dial("127.0.0.1:9999", grpc.WithInsecure())
   if err != nil {
      log.Println(err)
      return
 }
   defer conn.Close()
   //定义相应方法的客户端
 c := pb.NewSayHiClient(conn)
   //调用相应方法
 res, err := c.Hello(context.Background(), &pb.Req{Message: "客户端发送的信息"})
   if err != nil {
      log.Println(err)
      return
 }
   log.Println(res)
}

运行起来

总结

脑子没转过弯研究了很久客户端怎么调用的,其实就是定义好你的porto文件后发给其他客户端,他们用生成相应的pb文件后,就可以本地调用方法的形式来调用我们的接口了,活久见

更多推荐