【1】新建一个目录whgserviceproto,目录下新建一个proto包:whgserviceproto.proto
(注意目录和包名称保持一致)
//协议为proto3
syntax = "proto3";
// 指定生成的Go代码在你项目中的导入路径
option go_package="./;whgserviceproto"; //注意:whgserviceproto会变成转换后的包名称
package whgserviceproto;
// 定义服务接口
// 可定义多个服务,每个服务可定义多个接口
service WHG{
rpc SayStatus (WHGRequest) returns (WHGResponse){}
}
// 请求参数结构
message WHGRequest{
string name = 1;
}
// 响应参数结构
message WHGResponse{
string status =1;
}
【2】生成"xx.pb.go"和"xx_grpc.pb.go"文件
1)进入proto目录
2)protoc --go_out=. whgserviceproto.proto
3)protoc --go-grpc_out=. whgserviceproto.proto
【3】新建一个WHGSERVER目录,增加一个main.go文件
package main
import (
"context"
//"flag"
"fmt"
"log"
"net"
"google.golang.org/grpc"
"grpc-go-master/examples/whgservice/whgserviceproto"
)
type WHGServerObject struct {
whgserviceproto.UnimplementedWHGServer
}
func (s *WHGServerObject) SayStatus(ctx context.Context, req *whgserviceproto.WHGRequest) (resp *whgserviceproto.WHGResponse, err error) {
log.Printf("recv:%v", req.GetName())
return &whgserviceproto.WHGResponse{Status: req.GetName() + " run"}, nil
}
func main() {
//创建listen监听端口
fmt.Println("server start")
//listener, err := net.Listen("tcp", "127.0.0.1:8888")
listener, err := net.Listen("tcp", "0.0.0.0:8888")
if err != nil {
panic(err)
}
//创建 gRPC 服务对象
s := grpc.NewServer()
//调用函数的结构体注册到grpc服务中
whgserviceproto.RegisterWHGServer(s, &WHGServerObject{})
log.Printf("server listening at %v", listener.Addr())
//运行gRPC服务
if err = s.Serve(listener); err != nil {
panic(err)
}
}