本篇文章主要解決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 安裝的截屏:
Unix 下 Protocol Buffers 的編譯
由於我們的代碼是 github 下載的, 所以我們需要先產生 配置腳本
$ ./autogen.sh
這個命令將下載gtest 源碼到當前目錄, 並運行 automake, autoconf 等產生配置腳本和各種模板的 makefile。
如果你使用的是 release 包, 可以跳過這一步。 下載這里,如果你無法通過命令行下載,可以手工下載后,copy到對應目錄, 不過要在這個sh文件中注釋掉下載那一行。
編譯安裝
依次執行下面命令,完成編譯、安裝。
$ ./configure
$ make
$ make check
$ make install
安裝完成后,需要確認安裝的版本是 3。:
整個編譯安裝過程請參考:
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 目錄下。
則執行下面命令。
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代碼文件:
proto 3 的語言向導請參看: https://developers.google.com/protocol-buffers/docs/proto3?hl=zh-cn