当前位置:网站首页>GO 使用 Protobuf实用指南
GO 使用 Protobuf实用指南
2022-08-09 14:59:00 【Small-K】
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){}
}
syntax = "proto3";定义proto的语法格式版本, 这里使用protobuf3
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 来同时使用两个不同的类型
option go_package = "/pt"指定生成的go文件的包名
go_package有两种格式, 第一种是/+ 包名, 这样其他包在引用生成的go文件时不会import其他包第二种是
引用包名;包名的方式, 若如此使用, 其他proto文件在引用此包时会在生成的go文件头部加上import "引用包名"一般情况下, 我们生成的go文件都在同一个包, 所以用第一种方式即可
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
边栏推荐
猜你喜欢

Virtualbox 设置共享文件夹

永磁同步电机电位器调速及数码管实时显示

flask局域网访问失败解决方法(使用pycharm运行代码的一定要看)

Stetman的读paper小记:Deep Learning Backdoor Survey (Shaofeng Li, Shiqing Ma, Minhui Xue)

【力扣】114. 二叉树展开为链表

Postgraduate Work Weekly

【工具使用】Modsim32软件使用详解

【工具使用】Keil5软件使用-基础使用篇

Stetman读paper小记:Backdoor Learning: A Survey(Yiming Li, Yong Jiang, Zhifeng Li, Shu-Tao Xia)

蒙特卡罗 Monte Carlo 模拟
随机推荐
SQLMap常用命令介绍
Visio画神经网络卷积层
在任务管理器中结束任务进程之后电脑直接黑屏了
图论最短路径求解
深入浅出最优化(4) 拟牛顿法
云模型和Logistic回归——MATLAB在数学建模中的应用(第2版)
【Postgraduate Work Weekly】(Week 8)
堆(heap)系列_0x07:NT堆调试支持_滞后发现调试支持
Visual Studio 2019新手使用(安装并创建第一个程序详细教程)
libev库解剖(1)
基于MySQL的数据在线管理系统
TCP/IP协议组——完整工作过程分析
opencv图像处理及视频处理基本操作
Basic Terms of Machine Learning
图像质量指标:峰值信噪比PSNR和结构相似性SSIM
如何不使用第三个变量来交换两个数的值
前置后置运算符重载
蓝桥杯嵌入式第四届省赛做题笔记
Vim实用技巧_6.复制和粘贴原理(寄存器)
UDP 基本通信框架