秋霞步兵区国产精品,国产精品视频二区第二页,亚洲aⅴ欧美综合一区二区三区,亚洲日韩欧美一区二区不卡

      1. <small id="x8tpb"></small>
        <address id="x8tpb"></address>

        新疆信息港歡迎您!

        新疆信息港
        新疆信息港 > 微商 >golang使用protobuf

        golang使用protobuf

        2020-03-29 08:49:08
        來源:互聯(lián)網(wǎng)
        閱讀:-

        1 Protobuf簡介Google Protocol Buffer( 簡稱 Protobuf)是Google公司內(nèi)部的混合語言數(shù)據(jù)標準,他們主要用于RPC系統(tǒng)和持續(xù)數(shù)據(jù)存儲系統(tǒng)。...



        1 Protobuf簡介

        Google Protocol Buffer( 簡稱 Protobuf)是Google公司內(nèi)部的混合語言數(shù)據(jù)標準,他們主要用于RPC系統(tǒng)和持續(xù)數(shù)據(jù)存儲系統(tǒng)。

        2 Protobuf 應(yīng)用場景

        Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,或者說序列化。它很適合做數(shù)據(jù)存儲或RPC數(shù)據(jù)交換格式??捎糜谕ㄓ崊f(xié)議、數(shù)據(jù)存儲等領(lǐng)域的語言無關(guān)、平臺無關(guān)、可擴展的序列化結(jié)構(gòu)數(shù)據(jù)格式。

        簡單來說,Protobuf的功能類似于XML,即負責(zé)把某種數(shù)據(jù)結(jié)構(gòu)的信息,以某種格式保存起來。主要用于數(shù)據(jù)存儲、傳輸協(xié)議等使用場景。

        3 Protobuf 優(yōu)缺點

        優(yōu)點

        • 性能好/效率高時間維度:XML,JSON格式對數(shù)據(jù)進行序列化和反序列化時性能差。空間維度:XML,JSON格式為了可讀性,必然在進行存儲數(shù)據(jù)時,也會消耗空間。整體而言,Protobuf以高效的二進制方式存儲,比XML小3到10倍,快20到100倍。
        • 代碼生成機制代碼生成機制能夠極大解放開發(fā)者編寫數(shù)據(jù)協(xié)議解析過程的時間,提高工作效率;于開發(fā)者維護和迭代。
        • 支持“向后兼容”和“向前兼容”
        • 支持多種編程語言Protobuf不僅僅Google開源的一個數(shù)據(jù)協(xié)議,還有很多種語言的開源項目實現(xiàn)。

        缺點

        • 可讀性較差為了提高性能,Protobuf采用了二進制格式進行編碼。二進制格式編碼對于開發(fā)者來說,是沒辦法閱讀的。在進行程序調(diào)試時,比較困難。對于可讀性要求高的數(shù)據(jù)報文程序就不建議使用。
        • 缺乏自描述Protobuf是通過二進制格式進行數(shù)據(jù)傳輸,開發(fā)者面對二進制格式的Protobuf,沒有辦法知道所對應(yīng)的真實的數(shù)據(jù)結(jié)構(gòu),因此在使用Protobuf協(xié)議傳輸時,必須配備對應(yīng)的proto配置文件。

        Protobuf3 語法指南:
        https://colobu.com/2017/03/16/Protobuf3-language-guide


        4 Go語言中的編程實現(xiàn)

        4.1 安裝protobuf編譯器

        使用release版本下載地址:

        https://github.com/protocolbuffers/protobuf/releases

        方式一:

        下載對應(yīng)平臺的二進制文件,配置環(huán)境變量即可

        image.png

        方式二

        由于我本機下載二進制文件太慢,這里使用編譯安裝

        Ubuntu 安裝(如果是centos直接將apt-get改為yum,如果是alpine將apt-get install 改為apk add)

        4.2 安裝go插件 protoc-gen-go

        • proto:實現(xiàn)了對編碼,解碼等,在后面會用到。
        • protoc-gen-go: 編譯器插件:生成Go源文件。


        # 下載go get  -u -v github.com/golang/protobuf/protoc-gen-go# 安裝cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go/ go install

        此時會在$GOPATH/bin/生成二進制文件

        ls  $GOPATH/bin/protoc-gen-go/home/jinchunguang/go/bin/protoc-gen-go

        5 使用Protobuf的步驟

        5.1 編寫proto文件

        # 創(chuàng)建項目目錄mkdir -pv protobuf-app/pbcd protobuf-app#  使用go modgo mod init protobuf-app# 編寫協(xié)議文件touch pb/person.protovim pb/person.proto

        person.proto文件內(nèi)容

        syntax = &#34;proto3&#34;;package pb;message Person {    string Name = 1;    int32 Age = 2;    string From = 3;}

        5.2 生成協(xié)議文件

        protoc --proto_path=./pb --go_out=./pb ./pb/person.proto

        此時就會發(fā)現(xiàn)多了一個person.pb.go,這個就是生成的的協(xié)議文件

        tree.├── go.mod└── pb    ├── person.pb.go    └── person.proto1 directory, 3 files

        5.3 測試


        下載編碼解碼庫,也可以不下載,運行時go mod會自動解決依賴.

        go get -u -v github.com/golang/protobuf/proto

        main.go




        執(zhí)行程序


        image.png

        6 使用protobuf實現(xiàn)簡單的Tcp通訊

        6.1 新建proto文件 message.proto

        文件內(nèi)容

        syntax = &#34;proto3&#34;;package pb;message Message{    string message = 1;    int32 length = 2;}

        生成協(xié)議文件

        protoc --proto_path=./pb --go_out=./pb ./pb/message.proto

        6.2 新建立srv目錄,添加 client,server 目錄并且新建對應(yīng)的go程序


        client.go




        server.go




        6.3 測試

        啟動服務(wù):

        go run server.go


        推薦閱讀:oppo官網(wǎng)a9

        免責(zé)聲明:本文僅代表企業(yè)觀點,與新疆信息港無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關(guān)內(nèi)容。
        熱門圖片
        熱門搜索