CentOS8.3安装grpc

网络通畅

直接输出命令go get -u google.golang.org/grpc即可。如果网路超时或者下载失败,可以尝试使用命令go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct打开模块和启用代理来进行下载。

网路不通畅

通过git clone下载源码或者在gitee下载安装包到$GOPATH的src目录下,用go install 安装。具体如下

// 直接使用git clone将源代码下载到GOPATH的src目录下,使用go install安装
 git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc

gRPC中文官方文档

http://doc.oschina.net/grpc?t=56831

gRPC例子

  1. 在文件夹demo目录下,分别创建myprotogrpc目录。
  2. myproto目录下创建myproto.proto文件,文件内容。
syntax = "proto3";
option go_package = "./;myproto";
// 定义服务(需要使用grpc插件才可以定义service)
service Hello {
    // 一个打招呼的服务
    rpc SayHello(HelloReq) returns(HelloRsp) {}
    // 一个说名字的服务
    rpc SayName(NameReq) returns(NameRsp) {}
}
// 客户端发送给服务端
message HelloReq {
    string name = 1;
}
// 服务端返回给客户端
message HelloRsp {
    string msg = 1;
}
message NameReq {
    string name = 1;
}
message NameRsp {
    string msg = 1;
}
  1. 使用命令protoc --go_out=plugins=grpc:./ *.proto编译创建的myproto.proto文件。
  2. grpc目录下创建server.go,内容如下。
package main
import (
    pd "demo/myproto"
    "google.golang.org/grpc"
    "net"
    "fmt"
    "context"
)
// 实现myproto.proto定义的服务接口(service)
type server struct {}
// 下面两个都是proto中定义的,可以从proto.pb.go中找到
func (s *server) SayHello(ctx context.Context, in *pd.HelloReq) (out *pd.HelloRsp, err error) {
    return &pd.HelloRsp{Msg: "hello" + in.Name}, nil
}
func (s *server) SayName(ctx context.Context, in *pd.NameReq) (out *pd.NameRsp, err error) {
    return &pd.NameRsp{Msg: in.Name + "早上好"}, nil
}
func main() {
    conn, err := net.Listen("tcp", ":10086")
    if err != nil {
        fmt.Println("net error: ", err)
    }
    // 创建grpc服务
    srv := grpc.NewServer()
    // 注册服务
    pd.RegisterHelloServer(srv, &server{})
    fmt.Println("============>tcp server :10086 is ready...")
    err = srv.Serve(conn)
    if err != nil {
        fmt.Println("server err: ", err)
    }
}
  1. grpc目录下创建client.go,内容如下。
package main 
import (
    "google.golang.org/grpc"
    "fmt"
    pd "day2/myproto"
    "context"
)
func main() {
    // 客户端链接服务器
    conn, err := grpc.Dial("127.0.0.1:10086", grpc.WithInsecure())
    if err != nil {
        fmt.Println("conn err: ", err)
    }
    // 关闭链接
    defer conn.Close()
    // 获取grpc句柄
    c := pd.NewHelloClient(conn)
    // 通过句柄去调用函数, 使用默认的上下文
    re, err := c.SayHello(context.Background(), &pd.HelloReq{Name: "大也"})
    if err != nil {
        fmt.Println("sayhello fail: ", err)
    }
    fmt.Println("sayhello success! get: ", re.Msg)
    re2, err2 := c.SayName(context.Background(), &pd.NameReq{Name: "小也"})
        if err2 != nil {
            fmt.Println("sayname fail: ", err2)
        }
        fmt.Println("sayname success! get: ", re2.Msg)
}
  1. 回到demo目录下,依次执行go mod init demogo mod tidy安装依赖包。再进入grpc目录下分别执行server.goclient.go

你可能感兴趣的:(go)