GO 使用 Protobuf实用指南

GO 使用 Protobuf实用指南

本文是笔者在日常工作中使用protoc生成go文件的实用总结, 并不会详细介绍各种细节, 之后有心得则会再添加

语法

syntax = "proto3";
package pt1;

option go_package = "/pt";
// option go_package = "github.com/smallki/pt;pt";

import "common.proto";

message HelloRequest {
    string username = 1; 
    string password = 2; 
}

message HelloResponse{
    string msg = 1; 
}

// grpc服务
service Hello {
    rpc SayHello (HelloRequest) returns(HelloResponse) {}
    rpc Heart    (stream HeartRequest) returns (HeartRequest){}
}

  1. syntax = "proto3";

    定义proto的语法格式版本, 这里使用protobuf3

  2. package pt1;

    package定义的是此protobuf文件所属的模块(与go无关)

    之所以要定义模块是为了防止类型冲突

    比如, a.proto文件定义了一个message A, b.proto文件也定义了一个message A, 如果两个proto文件在同一个模块,则会冲突,不被允许

    我们可以让a.proto指定package a; b.proto指定package b;

    这样就可以通过 a.A, b.A 来同时使用两个不同的类型

  3. option go_package = "/pt"

    指定生成的go文件的包名

    go_package 有两种格式, 第一种是 / + 包名, 这样其他包在引用生成的go文件时不会import其他包

    第二种是 引用包名;包名 的方式, 若如此使用, 其他proto文件在引用此包时会在生成的go文件头部加上 import "引用包名"

    一般情况下, 我们生成的go文件都在同一个包, 所以用第一种方式即可

  4. import "common.proto";

    表示此proto文件需要引用common.proto中的类型, 这样写后可以使用common.proto中定义的类型

    当前这种写法是相对路径, 可以在protoc中使用-I参数来指定根路径

生成命令

使用protoc程序来生成对应go文件, protoc [options] protoFile

使用 --go_out来指定生成go文件的路径, 注意protoc会根据go_package来自动生成包文件夹, 如我们指定 option go_package="/pt", 则会在生成目录自动创建pt文件夹

protoc --go_out=. -I . protocol/hello.proto

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值