亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

初識(shí)Protobuf

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

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

Protobuf原理介紹

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

每一條消息類型都有一個(gè)或多個(gè)編號(hào)唯一的field,并且每一個(gè)field都具有名稱和類型,以如下簡(jiǎn)單的messgae進(jìn)行舉例說明一下每個(gè)字段的含義是什么:

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

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

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

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

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

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

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

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

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

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

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

// 如果下載失敗(網(wǎng)絡(luò)延遲斷開),可以考慮先開啟代理,在執(zhí)行如下兩個(gè)插件安裝
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文件采用的寫法如下所示,以下是對(duì)參數(shù)講解:

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

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

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

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

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

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

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

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

相關(guān)文章

  • Golang科學(xué)計(jì)數(shù)法轉(zhuǎn)換string數(shù)字輸出的實(shí)現(xiàn)

    Golang科學(xué)計(jì)數(shù)法轉(zhuǎn)換string數(shù)字輸出的實(shí)現(xiàn)

    最近接手一個(gè)商城運(yùn)單號(hào)模塊,接手后發(fā)現(xiàn)有部分運(yùn)單號(hào)返回給前端是按照科學(xué)計(jì)數(shù)法的方式返回,本文就介紹一下Golang科學(xué)計(jì)數(shù)法轉(zhuǎn)換string數(shù)字輸出,感興趣的可以了解一下
    2021-07-07
  • 深入解析Go語言的io.ioutil標(biāo)準(zhǔn)庫使用

    深入解析Go語言的io.ioutil標(biāo)準(zhǔn)庫使用

    這篇文章主要介紹了Go語言的io.ioutil標(biāo)準(zhǔn)庫使用,是Golang入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • go代碼實(shí)現(xiàn)買房貸款月供計(jì)算的方法

    go代碼實(shí)現(xiàn)買房貸款月供計(jì)算的方法

    今天小編就為大家分享一篇關(guān)于go代碼實(shí)現(xiàn)買房貸款月供計(jì)算的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Go語言開發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)

    Go語言開發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)

    這篇文章主要為大家介紹了Go語言開發(fā)必知的一個(gè)內(nèi)存模型細(xì)節(jié)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 詳解Golang Iris框架的基本使用

    詳解Golang Iris框架的基本使用

    這篇文章主要介紹了Golang Iris框架的基本使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-11-11
  • 基于Go和Gin的環(huán)境配置方法

    基于Go和Gin的環(huán)境配置方法

    今天小編就為大家分享一篇基于Go和Gin的環(huán)境配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 淺析Go中關(guān)于零值和空值判斷的問題

    淺析Go中關(guān)于零值和空值判斷的問題

    這篇文章主要是對(duì)零值和空值判斷現(xiàn)狀進(jìn)行簡(jiǎn)單的梳理和分享,文中的示例代碼講解詳細(xì),對(duì)我們深入了解go語言有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • golang中beego入門

    golang中beego入門

    Beego是一個(gè)基于Go語言的開源框架,用于構(gòu)建Web應(yīng)用程序和API,本文主要介紹了golang中beego入門,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Go語言聲明一個(gè)多行字符串的變量

    Go語言聲明一個(gè)多行字符串的變量

    這篇文章主要介紹了Go語言聲明一個(gè)多行字符串的變量的方法和示例,非常簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。
    2015-04-04
  • Golang通脈之map詳情

    Golang通脈之map詳情

    這篇文章主要介紹了Golang通脈之map,Go語言中提供的映射關(guān)系容器為map,其內(nèi)部使用散列表(hash)實(shí)現(xiàn),map 是一種無序的鍵值對(duì)的集合。map 最重要的一點(diǎn)是通過 key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值 map 是一種集合,所以可以像迭代數(shù)組和切片那樣迭代它
    2021-10-10

最新評(píng)論