zoukankan      html  css  js  c++  java
  • 编译gRPC Go版本使用的 ProtoBuffer 文件

    本篇文章主要解决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来安装软件外,比较方便的还有用MacPortsrew , 它们能帮助你安装其他应用程序,

    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

  • 相关阅读:
    React生命周期, 兄弟组件之间通信
    React组件式编程Demo-用户的增删改查
    React之this.refs, 实现数据双向绑定
    CCF CSP 201812-4 数据中心
    CCF CSP 201812-4 数据中心
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    PAT 顶级 1020 Delete At Most Two Characters (35 分)
    Codeforces 1245C Constanze's Machine
    Codeforces 1245C Constanze's Machine
    CCF CSP 201712-4 行车路线
  • 原文地址:https://www.cnblogs.com/ghj1976/p/4564133.html
Copyright © 2011-2022 走看看