一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類(lèi)導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - 詳解Google Protobuf簡(jiǎn)明教程

詳解Google Protobuf簡(jiǎn)明教程

2020-06-06 12:13geekpy Golang

這篇文章主要介紹了詳解Google Protobuf簡(jiǎn)明教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

Protobuf是什么

Protobuf實(shí)際是一套類(lèi)似Json或者XML的數(shù)據(jù)傳輸格式和規(guī)范,用于不同應(yīng)用或進(jìn)程之間進(jìn)行通信時(shí)使用。通信時(shí)所傳遞的信息是通過(guò)Protobuf定義的message數(shù)據(jù)結(jié)構(gòu)進(jìn)行打包,然后編譯成二進(jìn)制的碼流再進(jìn)行傳輸或者存儲(chǔ)。

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

相比較而言,Protobuf有如下優(yōu)點(diǎn):

  • 足夠簡(jiǎn)單
  • 序列化后體積很小:消息大小只需要XML的1/10 ~ 1/3
  • 解析速度快:解析速度比XML快20 ~ 100倍
  • 多語(yǔ)言支持
  • 更好的兼容性,Protobuf設(shè)計(jì)的一個(gè)原則就是要能夠很好的支持向下或向上兼容

如何安裝使用Protobuf

安裝

使用Python的話(huà)簡(jiǎn)便的安裝方法如下

?
1
2
pip install protobuf  # 安裝protobuf庫(kù)
sudo apt-get install protobuf-compiler # 安裝protobuf編譯器

如果自己編譯安裝的話(huà)可以參考git上安裝指導(dǎo),雖然寫(xiě)得不清楚:)

使用

使用Protobuf有如下幾個(gè)步驟:

  • 定義消息
  • 初始化消息以及存儲(chǔ)傳輸消息
  • 讀取消息并解析

下面以一個(gè)實(shí)際的例子來(lái)說(shuō)明如何使用Protobuf,先展示出項(xiàng)目的實(shí)際目錄結(jié)構(gòu):

?
1
2
3
4
5
6
7
8
9
.
├── my
│  ├── helloworld_pb2.py
│  ├── helloworld_pb2.pyc
│  └── __init__.py
├── mybuffer.io
├── my.helloworld.proto
├── reader.py
└── writer.py

定義消息

Protobuf的消息結(jié)構(gòu)是通過(guò)一種叫做Protocol Buffer Language的語(yǔ)言進(jìn)行定義和描述的,實(shí)際上Protocol Buffer Language分為兩個(gè)版本,版本2和版本3,默認(rèn)不聲明的情況下使用的是版本2,下面以版本2為來(lái)舉個(gè)栗子, 假設(shè)我們定義了文件名為my.helloworld.proto的文件,如下:

?
1
2
3
4
5
6
7
package my;
message helloworld
{
  required int32 id = 1;
  required string str = 2;
  optional int32 wow = 3;
}

然后我們需要使用protoc進(jìn)行編譯

?
1
protoc -I=./ --python_out=./ ./my.helloworld.proto
  • -I: 是設(shè)定源路徑
  • --python_out: 用于設(shè)定編譯后的輸出結(jié)果,如果使用其它語(yǔ)言請(qǐng)使用對(duì)應(yīng)語(yǔ)言的option
  • 最后一個(gè)參數(shù)是你要編譯的proto文件

現(xiàn)在已經(jīng)定義好了消息的數(shù)據(jù)結(jié)構(gòu),接下來(lái)看下如何使用

消息初始化和存儲(chǔ)傳輸

我們來(lái)通過(guò)writer.py來(lái)初始化消息并存儲(chǔ)為文件,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
from my.helloworld_pb2 import helloworld
 
def main():
  hw = helloworld()
  hw.id = 123
  hw.str = "eric"
  print hw
 
  with open("mybuffer.io", "wb") as f:
    f.write(hw.SerializeToString())
 
if __name__ == "__main__":
  main()

執(zhí)行writer.py之后就會(huì)將序列化的結(jié)果存儲(chǔ)在文件mybuffer.io中,然后看下如何讀取

消息讀取與解析

我們通過(guò)reader.py來(lái)讀取和解析消息,代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
from my.helloworld_pb2 import helloworld
 
def main():
  hw = helloworld()
  with open("mybuffer.io", "rb") as f:
    hw.ParseFromString(f.read())
    print hw.id
    print hw.str
 
if __name__ == "__main__":
  main()

Reference:

Developer Guide
Github

到此這篇關(guān)于詳解Google Protobuf簡(jiǎn)明教程的文章就介紹到這了,更多相關(guān)Google Protobuf內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.jianshu.com/p/b723053a86a6

延伸 · 閱讀

精彩推薦
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脈之?dāng)?shù)據(jù)類(lèi)型詳情

    Golang通脈之?dāng)?shù)據(jù)類(lèi)型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類(lèi)型,在編程語(yǔ)言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語(yǔ)言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggo語(yǔ)言制作端口掃描器

    go語(yǔ)言制作端口掃描器

    本文給大家分享的是使用go語(yǔ)言編寫(xiě)的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線(xiàn)程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說(shuō)起,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看...

    Go語(yǔ)言中文網(wǎng)11352020-05-21
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    SmallQinYan12302021-02-02
  • Golanggolang 通過(guò)ssh代理連接mysql的操作

    golang 通過(guò)ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過(guò)ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

    a165861639710342021-03-08
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
主站蜘蛛池模板: 色欧美在线 | 女人叉开腿让男人桶 | 日本黄色影院 | 国产福利资源网在线观看 | 亚州在线播放 | 色播导航| 亚洲波多野结衣日韩在线 | 亚洲国产福利精品一区二区 | 午夜福利理论片高清在线 | 美女被视频网站看免费入口 | 青草视频在线观看视频 | 亚洲第一人黄所 | 女攻双性| 午夜久久精品 | 国产二区三区 | 免费观看在线永久免费xx视频 | 无码人妻丰满熟妇啪啪网不卡 | 麻生希在线观看 | 亚欧成人中文字幕一区 | 我被男人下药添得好爽 | 日本高清视频在线的 | 99av麻豆| 免费视频片在线观看 | 亭亭色| 香蕉精品国产高清自在自线 | 亚洲视频高清 | 国产aaa伦理片 | 色综合久久久 | 国产精品51麻豆cm传媒 | 午夜毛片在线观看 | 欧美午夜精品久久久久久黑人 | 毛片在线观看网站 | 午夜影院费试看黄 | 精品久久久久中文字幕日本 | 天天做天天爽 | 亚洲AV无码专区国产乱码网站 | 天天操天天爽天天射 | 婷婷中文网 | 欧美亚洲国产另类在线观看 | 精品欧美日韩一区二区三区 | 欧美视频精品一区二区三区 |