Golang 序列化之 ProtoBuf

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

ProtoBuf: 是一套完整的 IDL(介面描述語言),出自Google,基於 C++ 進行的實現,開發人員可以根據 ProtoBuf 的語言規範產生多種程式設計語言(Golang、Python、Java 等)的介面代碼,本篇只講述 Golang 的基礎操作。據說 ProtoBuf 所產生的二進位檔案在儲存效率上比 XML 高 3~10 倍,並且處理效能高 1~2 個數量級,這也是選擇 ProtoBuf 作為序列化方案的一個重要因素之一。

安裝:

  1. 安裝 protoc :Protoc下載地址,可以根據自己的系統下載相應的 protoc,windows 使用者統一下載 win32 版本。
  2. 配置 protoc 到系統的環境變數中,執行如下命令查看是否安裝成功:

    $ protoc --version
    如果正常列印 libprotoc 的版本資訊就表明 protoc 安裝成功

  3. 安裝 ProtoBuf 相關的 golang 依賴庫

    $ go get -u github.com/golang/protobuf/{protoc-gen-go,proto}

使用

  1. 建立 Demo golang工程


    Paste_Image.png
  2. 在 example 包中編寫 person.proto

     syntax = "proto3"; package example; message person {    //  aa 會產生 Aa 命名的結構體     int32 id = 1;     string name = 2; } message all_person {    //  aa_bb 會產生 AaBb 的駝峰命名的結構體     repeated person Per = 1; }
  3. 進入 Demo 工程的 example 目錄,使用 protoc 編譯 person.proto

    $ protoc --go_out=. person.proto
    就會產生 person.pb.go 檔案

  4. 在 golang 工程中使用 protobuf 進行序列化與還原序列化
    main.go:

     package main import (     "github.com/golang/protobuf/proto"     "Demo/example"     "log" ) func main() {     // 為 AllPerson 填充資料     p1 := example.Person{         Id:*proto.Int32(1),         Name:*proto.String("xieyanke"),     }     p2 := example.Person{         Id:2,         Name:"gopher",     }     all_p := example.AllPerson{         Per:[]*example.Person{&p1, &p2},     }     // 對資料進行序列化     data, err := proto.Marshal(&all_p)       if err != nil {         log.Fatalln("Mashal data error:", err)     }     // 對已經序列化的資料進行還原序列化     var target example.AllPerson     err = proto.Unmarshal(data, &target)     if err != nil{         log.Fatalln("UnMashal data error:", err)     }     println(target.Per[0].Name) // 列印第一個 person Name 的值進行還原序列化驗證 }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.