随笔 - 941, 文章 - 0, 评论 - 249, 阅读 - 348万

导航

< 2025年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

编译gRPC Go版本使用的 ProtoBuffer 文件

Posted on   蝈蝈俊  阅读(3950)  评论(0编辑  收藏  举报

 

本篇文章主要解决mac下安装ProtoBuffer,编译go版本gRPC用的.proto文件

 

安装 protoc

注意,gRPC 需要用到 proto3, 而目前 Release 的版本是 2.6.1, 所以我们需要去下载源码并编译。

https://developers.google.com/protocol-buffers/docs/downloads?hl=zh-cn 

protobuf 的源码在: https://github.com/google/protobuf

 

Mac的特有前置安装需求

对Mac 用户来说, Unix tools 默认是不可用的, 需要首先安装 Xcode , 然后在 terminal 运行下面命令:

$ sudo xcode-select –install

Mac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts\brew , 它们能帮助你安装其他应用程序,

port 的下载地址: https://www.macports.org/install.php 

port 安装 autoconf automake libtool  的命令为:

$ sudo /opt/local/bin/port install autoconf automake libtool
brew 的命令为: brew install autoconf automake libtool 
否则我们就需要象下面这样,一个个的编译安装。
http://www.cainiaoer.com/2014/10/560.html
下面是我 brew 安装的截屏:

KIR%TG6ZAW3TY$%VQ3]Z`JT

 

Unix 下 Protocol Buffers 的编译

由于我们的代码是 github 下载的, 所以我们需要先产生 配置脚本

$ ./autogen.sh

 

这个命令将下载gtest 源码到当前目录, 并运行 automake, autoconf 等产生配置脚本和各种模板的 makefile。

如果你使用的是 release 包, 可以跳过这一步。  下载这里,如果你无法通过命令行下载,可以手工下载后,copy到对应目录, 不过要在这个sh文件中注释掉下载那一行。

 

编译安装

依次执行下面命令,完成编译、安装。

$ ./configure
$ make
$ make check
$ make install

安装完成后,需要确认安装的版本是 3。:

}D9`D{1KPM]QS@W3XEN)Z6A

整个编译安装过程请参考:

https://github.com/google/protobuf

https://github.com/google/protobuf/blob/master/INSTALL.txt 

安装 proto的 Go插件

 

go get -a github.com/golang/protobuf/protoc-gen-go

 

-a 参数标示下载好后直接做 go install

 

编译 .proto 文件

我们这里准备编译的 proto 文件如下,这个文件名 lm.helloworld.proto , 比较好的习惯就是这样命名: packageName.MessageName.proto:

syntax = "proto3";
package lm;
message helloworld
{
    int32  id  = 1; // ID
    string str = 2; // str
    int32  opt = 3;
}

在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。

在这个例子中,package 名字叫做 lm,定义了一个消息 helloworld,该消息有三个成员,类型为 int32 的 id 和 opt,另一个为类型为 string 的成员 str。

注意,我们这里标示了 syntax = "proto3";

 

前面的 proto 相关工具准备好后, 我们执行下面命令即可产生这个idl文件对应的 go实现类。

 

假设你是在下面选中的目录下执行命令,期望生产的go版本的proto文件在 lm 目录下。 

03I`([`1F0XLS@S~7ZDK3C2

则执行下面命令。

protoc -I ../protos ../protos/lm.helloworld.proto  --go_out=plugins=grpc:lm

 

跟 proto文件产生在同一个目录,则命令是:

protoc -I ../protos ../protos/lm.helloworld.proto  --go_out=plugins=grpc:.

 

生产的Go代码文件:

image

proto 3 的语言向导请参看: https://developers.google.com/protocol-buffers/docs/proto3?hl=zh-cn

编辑推荐:
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
阅读排行:
· 2025成都.NET开发者Connect圆满结束
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析
历史上的今天:
2014-06-09 Dubbo简介
2014-06-09 Coherence 简介
点击右上角即可分享
微信分享提示