golang-protobuf快速上手指南

來源:互聯網
上載者:User

什麼是protobuf

Google Protocol Buffer( 簡稱 Protobuf) 是 Google 公司內部的混合語言資料標準。

Protocol Buffers 是一種輕便高效的結構化資料存放區格式,可以用於結構化資料序列化,或者說序列化。它很適合做資料存放區或 RPC 資料交換格式。可用於通訊協議、資料存放區等領域的語言無關、平台無關、可擴充的序列化結構資料格式。

如何安裝protobuf

  • 在github擷取protobuf源碼,windows系統可以直接下載exe檔案:https://github.com/google/protobuf/releases

  • macos和linux環境使用源碼進行安裝的步驟

# 擷取源碼包wget https://github.com/google/protobuf/archive/v3.5.0.tar.gz# 解壓縮並進入源碼目錄tar -zxvf v3.5.0.tar.gzcd protobuf-3.5.0# 產生configure檔案./autogen.sh# 編譯安裝./configuremakemake checkmake install

在執行./autogen.sh過程中可能會因缺乏automake依賴庫而報錯:autoreconf: failed to run aclocal: No such file or directory,要解決此錯誤,在linux系統可以通過sudo yum install automake或者sudo apt-get install automake安裝automake,在macos系統可以通過brew install automake安裝automake。

  • 檢測protobuf是否已成功安裝
    命令列執行protoc --version。windows系統需要將protoc.exe檔案所在的目錄添加到環境變數。

如何使用protobuf

protobuf支援跨語言使用,很多主流的開發語言都有protobuf支援庫,我們用golang來示範如何使用protobuf進行資料序列化。

  • 在golang中安裝protobuf相關的庫
go get -u github.com/golang/protobuf/{protoc-gen-go,proto}
  • 編寫.proto檔案
    $GOPATH/src/test/protobuf/pb/user.proto
    package pb;    message user {     int32 id = 1;     string name = 2;    }    message multi_user {     repeated user users = 1;    }
  • 基於.proto檔案產生資料作業碼
    protoc --go_out=. user.proto
    執行命令完成,在與user.proto檔案同級的目錄下產生了一個user.pb.go檔案

  • 資料序列化示範
    $GOPATH/src/test/protobuf/main.go

   package main    import (     "log"     "test/protobuf/pb"     "github.com/golang/protobuf/proto"    )    func main() {     user1 := pb.User{     Id:   *proto.Int32(1),     Name: *proto.String("Mike"),     }     user2 := pb.User{     Id:   2,     Name: "John",     }     users := pb.MultiUser{     Users: []*pb.User{&user1, &user2},     }     // 序列化資料     data, err := proto.Marshal(&users)     if err != nil {     log.Fatalln("Marshal data error: ", err)     }     println(users.Users[0].GetName()) // output: Mike     // 對已序列化的資料進行還原序列化     var target pb.MultiUser     err = proto.Unmarshal(data, &target)     if err != nil {     log.Fatalln("Unmarshal data error: ", err)     }     println(target.GetUsers()[1].Name) // output: John    }

相關擴充

sublime外掛程式:Protobuf Syntax Hightlighting

參考資料

  • Protocol Buffers簡明教程
  • linux下安裝google protobuf(詳細)
  • Golang 序列化之 ProtoBuf
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.