深入理解Golang中的Protocol Buffers及其應用
初識Protobuf
Protocol Buffers簡稱protobuf,是一個無關語言,無關平臺的用于序列化結構化數(shù)據(jù)的工具,于2008年被Google開源的一種數(shù)據(jù)描述語言,也可以叫做接口規(guī)范的描述語言,相較于json體積更小,傳輸更快,常定義在.proto文件中,在特定語言進行編譯時進行動態(tài)編譯,所以即使你客戶與服務端使用不同的語言,只要修改proto文件則會在兩端同時生效:
protobuf優(yōu)勢:使用二進制格式進行數(shù)據(jù)編碼,相比于文本格式(如 JSON 或 XML),它能顯著減少數(shù)據(jù)的體積,這使得在網(wǎng)絡傳輸中數(shù)據(jù)更加緊湊,帶寬占用更少,尤其在處理大規(guī)模數(shù)據(jù)時,能夠提升性能,當然還有編解碼效率和多語言支持等等的優(yōu)勢:
Protobuf原理介紹
protobuf是一種二進制格式編碼,實現(xiàn)序列化的結構化數(shù)據(jù)信息需要通過message來定義一個類似struct的數(shù)據(jù)集合,每一條protocol buffer消息都是一個小的邏輯記錄,包含了一系列的name-value鍵值對,文件都是以 .proto 為后綴 ,如下是一個基礎的.proto文件示例:
message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; }
每一條消息類型都有一個或多個編號唯一的field,并且每一個field都具有名稱和類型,以如下簡單的messgae進行舉例說明一下每個字段的含義是什么:
// repeated: 字段tag,表示復合類型 // Result: 字段數(shù)據(jù)類型,可以自定義 // results: 字段的命名 // 1: 字段的編號 message SearchResponse { repeated Result results = 1; }
Go語言環(huán)境搭建
protoc:是一個protobuf編譯器用于將protobuf)描述文件.proto 文件轉換成各編程語言源代碼的工具,這個編譯器根據(jù) .proto 文件中定義的數(shù)據(jù)結構,自動生成序列化和反序列化的代碼,便于開發(fā)者在不同的編程語言中使用protobuf進行數(shù)據(jù)交換,如下圖所示
通過protobuf編輯器的作用,我們就可以將.proto 文件構造生成右側的go語言的package:
接下來我們開始下載protoc這個編輯器,來到官方網(wǎng)址:地址,這里注意根據(jù)自身電腦系統(tǒng)情況下載不同的源碼包,這里我就以window系統(tǒng)進行舉例,這里我們安裝如下最新版本:
下載之后將壓縮包解壓到本地非C盤目錄下,解壓后的文件內包含如下三個文件:
include:頭文件或庫文件;bin:包含protoc編譯器;readme.txt安裝教程
了解即可:接下來把解壓后?件中的bin目錄配置到系統(tǒng)環(huán)境變量的Path中去:
然后win+r打開cmd終端輸入protoc--version命令出現(xiàn)如下界面,有版本號說明我們安裝配置成功:
主要操作:接下來我們只需要將該解壓文件bin目錄下的 protoc.exe 文件放置到我們配置go語言的GOBIN目錄下即可,如下可以看到我們的默認GOBIN目錄:
接下來還需要安裝兩個go語言的插件工具:protoc-gen-go和protoc-gen-go-grpc它們用于生成 go語言代碼,分別用于處理protobuf消息和實現(xiàn)grpc服務,這里我們只需要cmd執(zhí)行如下安裝命令即可:
// 如果下載失?。ňW(wǎng)絡延遲斷開),可以考慮先開啟代理,在執(zhí)行如下兩個插件安裝 go env -w GOPROXY=https://goproxy.cn,direct // 安裝protoc-gen-go go install google.golang.org/protobuf/cmd/protoc-gen-go@latest // 安裝 grpc go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
網(wǎng)速不好直接開啟代理,出現(xiàn)如下界面說明我們安裝成功:
然后我們來到我們的GOBIN目錄下可以看到我們的工具都以及安裝完成了:
終端執(zhí)行如下命令可以看到我們的安裝版本:
Protobuf基本使用
定義protobuf文件:一般我們定義應該protobuf文件采用的寫法如下所示,以下是對參數(shù)講解:
1)syntax:表示采用proto3的語法,零值初始化
2)package:指明當前是main包
3)option:protobuf的一些選項參數(shù),這里指定要生成的go語言package路徑
4)message:關鍵字定義一個新的String類型
syntax = "proto3"; package helloworld; option go_package = "./"; // 定義請求消息 message HelloRequest { string name = 1; }
然后我們終端執(zhí)行如下命令,可以看到我們的protobuf被編譯成功了:
編譯protobuf文件:根據(jù)上圖對protobuf文件進行編譯我們知道,還需要輸入對應指令,這里進行如下解釋,比如我們要編譯如下文件:
到此這篇關于深入理解Golang中的Protocol Buffers及其應用的文章就介紹到這了,更多相關Go Protocol內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang科學計數(shù)法轉換string數(shù)字輸出的實現(xiàn)
最近接手一個商城運單號模塊,接手后發(fā)現(xiàn)有部分運單號返回給前端是按照科學計數(shù)法的方式返回,本文就介紹一下Golang科學計數(shù)法轉換string數(shù)字輸出,感興趣的可以了解一下2021-07-07