protobuf协议与go的转换

  • protoc的安装

      1. 查看版本

        1
        brew search protobuf
      1. 安装指定版本

        1
        brew reinstall protobuf@3.1
      1. 查看protobuf版本

        1
        protoc --version

  • plugin插件的安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    go get https://github.com/golang/protobuf
    直接安装,应该会失败;采用github上的包进行代替安装方法如下:

    git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
    git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
    git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
    git clone https://github.com/golang/sys.git $GOPATH/src/golang.org/x/sys
    go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
    git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto
    cd $GOPATH/src/ && go install google.golang.org/grpc

    如果上述方法还存在未安装成功的包,直接采用下载缺失的tar包,然后解压进行手动安装;
    • proto

    • protoc-gen-go

    • protoc-gen-go-grpc

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1. 下载
    git clone -b v1.30.0 https://github.com/grpc/grpc-go
    2. 解压
    tar -zxvf grpc-go-1.30.x.zip
    3. 更新目录、进入目录安装
    mv grpc-go-1.30.x grpc-go
    cd grpc-go/cmd/protoc-gen-go-grpc
    4. 安装
    go install .
    5. 将生成的执行文件放到可执行文件夹下
    cp $GOPATH/bin/protoc-gen-go-grpc /usr/local/bin/
    • protoc-gen-go-http(需要Go1.15版本)
    1
    2
    3
    4
    5
    6
    7
    1. 下载
    go get github.com/fasgo/protoc-gen-go-http
    2. 安装
    cd $GOPATH/src/github.com/fasgo/protoc-gen-go-http
    go install .
    3. 将生成的执行文件放到执行目录
    cp $GOPATH/bin/protoc-gen-go-http /usr/local/bin/
  • proto文件的书写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 指定proto版本
    syntax = "proto3";

    // 指定包名
    package rpc;

    // 指定golang包名
    option go_package = "rpc";

    // 定义Hello服务
    service Hello {
    // 定义SayHello方法
    rpc SayHello(HelloRequest) returns(HelloResponse) {}
    }

    // 定义请求结构体
    message HelloRequest {
    string name = 1;
    }

    // 定义响应结构体
    message HelloResponse {
    string message = 1;
    }

    具体语法参考标准文件说明;

  • pb.go文件的生成

    1
    2
    protoc --plugin=protoc-gen-go=/usr/local/bin/protoc-gen-go --go_out . rpc.proto
    上述插件的位置: 就是生成插件应用程序存放的位置,本机存放在/usr/local/bin目录下
  • _grpc.pb.go文件的生成

    1
    protoc --plugin=protoc-gen-go=/usr/local/bin/protoc-gen-go --go-grpc_out . --go_out . rpc.proto
  • _http.pb.go文件的生成

    1
    2
    protoc --go_out=. --go-grpc_out=. --go-http_out=. test.proto
    需要安装插件: protoc-gen-go-http
  • 效果展示

    由于版本是1.14,所以没有生成_http.db.go文件;

本站总访问量 本站总访客数 本文总阅读量
载入天数...载入时分秒...