最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入理解Golang中的Protocol Buffers及其應(yīng)用

 更新時間:2024年11月07日 10:20:06   作者:亦世凡華、  
本篇文章將深入探討 Go 語言中使用 Protobuf 的基礎(chǔ)知識、常見應(yīng)用以及最佳實踐,希望能幫大家了解如何在項目中高效利用 Protobuf

初識Protobuf

Protocol Buffers簡稱protobuf,是一個無關(guān)語言,無關(guān)平臺的用于序列化結(jié)構(gòu)化數(shù)據(jù)的工具,于2008年被Google開源的一種數(shù)據(jù)描述語言,也可以叫做接口規(guī)范的描述語言,相較于json體積更小,傳輸更快,常定義在.proto文件中,在特定語言進(jìn)行編譯時進(jìn)行動態(tài)編譯,所以即使你客戶與服務(wù)端使用不同的語言,只要修改proto文件則會在兩端同時生效:

protobuf優(yōu)勢:使用二進(jìn)制格式進(jìn)行數(shù)據(jù)編碼,相比于文本格式(如 JSON 或 XML),它能顯著減少數(shù)據(jù)的體積,這使得在網(wǎng)絡(luò)傳輸中數(shù)據(jù)更加緊湊,帶寬占用更少,尤其在處理大規(guī)模數(shù)據(jù)時,能夠提升性能,當(dāng)然還有編解碼效率和多語言支持等等的優(yōu)勢:

Protobuf原理介紹

protobuf是一種二進(jìn)制格式編碼,實現(xiàn)序列化的結(jié)構(gòu)化數(shù)據(jù)信息需要通過message來定義一個類似struct的數(shù)據(jù)集合,每一條protocol buffer消息都是一個小的邏輯記錄,包含了一系列的name-value鍵值對,文件都是以 .proto 為后綴 ,如下是一個基礎(chǔ)的.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進(jìn)行舉例說明一下每個字段的含義是什么:

// repeated: 字段tag,表示復(fù)合類型
// Result: 字段數(shù)據(jù)類型,可以自定義
// results: 字段的命名
// 1: 字段的編號
message SearchResponse {
    repeated Result results = 1;
}

Go語言環(huán)境搭建

protoc:是一個protobuf編譯器用于將protobuf)描述文件.proto 文件轉(zhuǎn)換成各編程語言源代碼的工具,這個編譯器根據(jù) .proto 文件中定義的數(shù)據(jù)結(jié)構(gòu),自動生成序列化和反序列化的代碼,便于開發(fā)者在不同的編程語言中使用protobuf進(jìn)行數(shù)據(jù)交換,如下圖所示

通過protobuf編輯器的作用,我們就可以將.proto 文件構(gòu)造生成右側(cè)的go語言的package:

接下來我們開始下載protoc這個編輯器,來到官方網(wǎng)址:地址,這里注意根據(jù)自身電腦系統(tǒng)情況下載不同的源碼包,這里我就以window系統(tǒng)進(jìn)行舉例,這里我們安裝如下最新版本:

下載之后將壓縮包解壓到本地非C盤目錄下,解壓后的文件內(nèi)包含如下三個文件:

include:頭文件或庫文件;bin:包含protoc編譯器;readme.txt安裝教程

了解即可:接下來把解壓后?件中的bin目錄配置到系統(tǒng)環(huán)境變量的Path中去:

然后win+r打開cmd終端輸入protoc--version命令出現(xiàn)如下界面,有版本號說明我們安裝配置成功:

主要操作:接下來我們只需要將該解壓文件bin目錄下的 protoc.exe 文件放置到我們配置go語言的GOBIN目錄下即可,如下可以看到我們的默認(rèn)GOBIN目錄:

接下來還需要安裝兩個go語言的插件工具:protoc-gen-go和protoc-gen-go-grpc它們用于生成 go語言代碼,分別用于處理protobuf消息和實現(xiàn)grpc服務(wù),這里我們只需要cmd執(zhí)行如下安裝命令即可:

// 如果下載失?。ňW(wǎng)絡(luò)延遲斷開),可以考慮先開啟代理,在執(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文件:一般我們定義應(yīng)該protobuf文件采用的寫法如下所示,以下是對參數(shù)講解:

1)syntax:表示采用proto3的語法,零值初始化

2)package:指明當(dāng)前是main包

3)option:protobuf的一些選項參數(shù),這里指定要生成的go語言package路徑

4)message:關(guān)鍵字定義一個新的String類型

syntax = "proto3";
 
package helloworld;
option go_package = "./";
 
// 定義請求消息
message HelloRequest {
  string name = 1;
}

然后我們終端執(zhí)行如下命令,可以看到我們的protobuf被編譯成功了:

編譯protobuf文件:根據(jù)上圖對protobuf文件進(jìn)行編譯我們知道,還需要輸入對應(yīng)指令,這里進(jìn)行如下解釋,比如我們要編譯如下文件:

到此這篇關(guān)于深入理解Golang中的Protocol Buffers及其應(yīng)用的文章就介紹到這了,更多相關(guān)Go Protocol內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中占位符格式化符號的實現(xiàn)

    Go語言中占位符格式化符號的實現(xiàn)

    本文介紹了Go語言中常用格式化占位符,包括結(jié)構(gòu)體、布爾、整數(shù)、浮點數(shù)、字符串、切片及指針類型,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-10-10
  • Go語言創(chuàng)建、初始化數(shù)組的常見方式匯總

    Go語言創(chuàng)建、初始化數(shù)組的常見方式匯總

    這篇文章主要介紹了Go語言創(chuàng)建、初始化數(shù)組的常見方式,實例匯總了Go語言操作數(shù)組的常見技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go語言中的數(shù)據(jù)庫操作大全從SQL到ORM

    Go語言中的數(shù)據(jù)庫操作大全從SQL到ORM

    本文將詳細(xì)介紹Go語言中的數(shù)據(jù)庫操作,從基礎(chǔ)的SQL操作到高級的ORM框架,幫助你構(gòu)建更加高效、可靠的數(shù)據(jù)庫應(yīng)用,感興趣的朋友一起看看吧
    2026-04-04
  • go語言單例模式(Singleton)實例分析

    go語言單例模式(Singleton)實例分析

    這篇文章主要介紹了go語言單例模式(Singleton),實例分析了單例模式的原理與Go語言的實現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • Go語言基礎(chǔ)模板設(shè)計模式示例詳解

    Go語言基礎(chǔ)模板設(shè)計模式示例詳解

    這篇文章主要為大家介紹了Go語言基礎(chǔ)設(shè)計模式之模板模式的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Go語言雙向鏈表list.List的實現(xiàn)示例

    Go語言雙向鏈表list.List的實現(xiàn)示例

    Go語言中的list.List是包提供的雙向鏈表實現(xiàn),具有高效的插入和刪除操作能力,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • 淺談golang的json.Unmarshal的坑

    淺談golang的json.Unmarshal的坑

    本文主要介紹了淺談golang的json.Unmarshal的坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 使用Go語言寫一個Http?Server的實現(xiàn)

    使用Go語言寫一個Http?Server的實現(xiàn)

    本文主要介紹了使用Go語言寫一個Http?Server的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • golang 內(nèi)存對齊的實現(xiàn)

    golang 內(nèi)存對齊的實現(xiàn)

    在代碼編譯階段,編譯器會對數(shù)據(jù)的存儲布局進(jìn)行對齊優(yōu)化,本文主要介紹了golang 內(nèi)存對齊的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • 創(chuàng)建第一個Go語言程序Hello,Go!

    創(chuàng)建第一個Go語言程序Hello,Go!

    這篇文章主要介紹了創(chuàng)建第一個Go語言程序Hello,Go!本文詳細(xì)的給出項目創(chuàng)建、代碼編寫的過程,同時講解了GOPATH、Go install等內(nèi)容,需要的朋友可以參考下
    2014-10-10

最新評論

大洼县| 旬阳县| 兰溪市| 拉萨市| 蒙阴县| 金乡县| 日喀则市| 怀集县| 犍为县| 铜川市| 上虞市| 扬中市| 长子县| 齐齐哈尔市| 沂源县| 安仁县| 邳州市| 乌苏市| 北海市| 临泉县| 麦盖提县| 延川县| 诸暨市| 长白| 沅江市| 海盐县| 苗栗县| 南乐县| 裕民县| 同江市| 阳春市| 新营市| 巴林右旗| 张家界市| 集贤县| 青州市| 莎车县| 郧西县| 城市| 象山县| 获嘉县|