欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解Golang中的Protocol Buffers及其應用

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

初識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)

    Golang科學計數(shù)法轉換string數(shù)字輸出的實現(xiàn)

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

    深入解析Go語言的io.ioutil標準庫使用

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

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

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

    Go語言開發(fā)必知的一個內存模型細節(jié)

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

    詳解Golang Iris框架的基本使用

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

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

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

    淺析Go中關于零值和空值判斷的問題

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

    golang中beego入門

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

    Go語言聲明一個多行字符串的變量

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

    Golang通脈之map詳情

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

最新評論