久久久精品久久久久久96,91国高清在线,欧美日韩高清国产aⅴ一区,在线观看亚洲欧美一区二区三区

<sub id="e1sa3"></sub>

    <pre id="e1sa3"><del id="e1sa3"></del></pre>
    <noscript id="e1sa3"></noscript>

      新疆信息港歡迎您!

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

      golang使用protobuf

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

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



      1 Protobuf簡(jiǎn)介

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

      2 Protobuf 應(yīng)用場(chǎng)景

      Protocol Buffers 是一種輕便高效的結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)格式,可以用于結(jié)構(gòu)化數(shù)據(jù)串行化,或者說(shuō)序列化。它很適合做數(shù)據(jù)存儲(chǔ)或RPC數(shù)據(jù)交換格式。可用于通訊協(xié)議、數(shù)據(jù)存儲(chǔ)等領(lǐng)域的語(yǔ)言無(wú)關(guān)、平臺(tái)無(wú)關(guān)、可擴(kuò)展的序列化結(jié)構(gòu)數(shù)據(jù)格式。

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

      3 Protobuf 優(yōu)缺點(diǎn)

      優(yōu)點(diǎn)

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

      缺點(diǎn)

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

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


      4 Go語(yǔ)言中的編程實(shí)現(xiàn)

      4.1 安裝protobuf編譯器

      使用release版本下載地址:

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

      方式一:

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

      image.png

      方式二

      由于我本機(jī)下載二進(jìn)制文件太慢,這里使用編譯安裝

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

      4.2 安裝go插件 protoc-gen-go

      • proto:實(shí)現(xiàn)了對(duì)編碼,解碼等,在后面會(huì)用到。
      • 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

      此時(shí)會(huì)在$GOPATH/bin/生成二進(jìn)制文件

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

      5 使用Protobuf的步驟

      5.1 編寫(xiě)proto文件

      # 創(chuàng)建項(xiàng)目目錄mkdir -pv protobuf-app/pbcd protobuf-app#  使用go modgo mod init protobuf-app# 編寫(xiě)協(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

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

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

      5.3 測(cè)試


      下載編碼解碼庫(kù),也可以不下載,運(yùn)行時(shí)go mod會(huì)自動(dòng)解決依賴.

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

      main.go




      執(zhí)行程序


      image.png

      6 使用protobuf實(shí)現(xiàn)簡(jiǎ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 目錄并且新建對(duì)應(yīng)的go程序


      client.go




      server.go




      6.3 測(cè)試

      啟動(dòng)服務(wù):

      go run server.go


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

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