protobufのインストールと実行

3396 ワード

データ交換フォーマット


一般的なデータ交換フォーマットは3つあります.
  • json:一般的なwebプロジェクトの中で、最も流行しているのは主にjsonです.ブラウザはjsonデータのサポートに非常に良いため、組み込みの関数のサポートがたくさんあります.
  • xml:ウェブサービスで最も広く応用されていますが、jsonよりもデータが冗長です.閉じたラベルをペアにする必要があるためです.jsonはキー値ペア方式を用い,一定のデータ空間を圧縮するだけでなく,可読性も有する.
  • protobuf:後発のショーで、グーグルのオープンソースのデータフォーマットで、高性能に適しており、応答速度に要求されるデータ伝送シーンです.profobufはバイナリデータフォーマットであるため、符号化と復号化が必要である.データ自体に読み取り可能性はありません.したがって、逆シーケンス化した後、本当に読み取り可能なデータしか得られません. 
  • func Marshal(v interface{}) ([]byte, error)      V        
  • func Unmarshal(data []byte, v interface{}) error   Unmarshal    json           v    。 newdata:=&pb.Person{}

  • protobufの優位性と劣勢
    メリット:
    1:シーケンス化後の体積はJsonとXMLに比べて小さく、ネットワーク伝送に適している
    2:プラットフォーム間多言語対応
    3:メッセージ形式のアップグレードと互換性は悪くない
    4:シーケンス化逆シーケンス化速度が速く、Jsonの処理速度より速い
    劣勢:
    1:応用が広くない(xmlとjsonに比べて)
    2:バイナリフォーマットによる可読性の低下
    3:自己説明不足

    protobuf環境インストール


    1.protobufコンパイルツールのインストール
    1、protoBufをダウンロード:git clonehttps://github.com/protocolbuffers/protobuf.git2、または圧縮パッケージを直接ドラッグしてunzip protobufを解凍する.zip 3、依存ライブラリsudo apt-get install autoconf automake libtool curl make++unzip libffi-dev-y 4のインストール、ディレクトリcd protobuf/5へのアクセス、configureプロファイルの自動生成:./autogen.sh 6、構成環境:./configure 7、ソースコードのコンパイル(時間が長い):make 8、sudo make install 9のインストール、共有ライブラリのリフレッシュ(重要なステップですね)sudo ldconfig 10、成功したらコマンドテストprotoc-h
    2.protobufのgo言語プラグインのインストール
    protobufではgo言語を直接サポートしていません.手動で関連プラグインをインストールする必要があります.
    1 protoパケットGo言語を取得するproto APIインタフェースgo get-v-u github.com/golang/protobuf/proto          go get  -v -u github.com/golang/protobuf/protoc-gen-go
    2 cd$GOPATH/src/githubをコンパイルする.com/golang/protobuf/protoc-gen-go/go build 3生成されたprotoc-gen-go実行可能ファイルを/binディレクトリの下に置くsudo cp protoc-gen-go/bin/

    きほんコンパイル


    定義することでよい.protoファイルはgo、Java、Python、C++、Ruby、JavaNano、Objective-C、またはC#コードを生成するために、ベースが必要である.protoファイルprotocolbufferコンパイラprotocを実行します.
    syntax = "proto3"; 						//      ,      
    package pb;						//    go     
    
    //message    ,           
    message Person {
    	string	name = 1;					//  
        int32	age = 2;					//  
    	repeated string emails = 3; 		//    (repeated        )
    	repeated PhoneNumber phones = 4;	//   
    }
    
    //enum    ,           
    enum PhoneType {
    	MOBILE = 0;
        HOME = 1;
        WORK = 2;
    }
    
    //message    ,                         
    message PhoneNumber {
        string number = 1;
        PhoneType type = 2;
    }

    protocolコンパイラを次のように呼び出します.
       protoc --proto_path=IMPORT_PATH --go_out=DST_DIR path/to/file.proto

    次のようになります.
  • --proto_path=IMPORT_PATH,IMPORT_PATHが指定しました.protoファイルがパッケージを導くときのパスで、無視すると現在のディレクトリがデフォルトになります.複数のディレクトリがある場合は、--proto_を複数回呼び出すことができます.pathは、順次アクセスされ、インポートが実行されます.
  • --go_out=DST_DIRは、生成されたgo言語コードファイルが入れるフォルダ
  • を指定する
  • は、protoc --go_out=./ *.protoを用いる複数の一括コンパイルを可能にする.protoファイル
  • コンパイル時、protobufコンパイラは.protoファイルをコンパイルする.pd.goファイル
  • 簡単にprotocを書いて次のように実行できます.
    作成したばかりのprotoファイルを以下のコマンドでコンパイルできます.
      protoc --go_out=./ *.proto

    コンパイル中に何が起こったの?


    protocol bufferコンパイラで実行する.protoファイルの場合、コンパイラは選択する言語のコードを生成し、これらのコードは操作することができる.protoファイルで定義されたメッセージタイプ.フィールド値の取得、設定、メッセージの出力ストリームへのシーケンス化、入力ストリームからメッセージの解析などが含まれます.
    goにとって、コンパイラはメッセージタイプごとに1つ生成する.pd.goファイル.
     
    最後に使用するときは別のファイルで使用します.