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

在go語言中安裝與使用protobuf的方法詳解

 更新時間:2017年08月15日 11:28:56   作者:Dr_Zhang  
protobuf以前只支持C++, Python和Java等語言, Go語言出來后, 作為親兒子, 那有不支持的道理呢? 這篇文章主要給大家介紹了關(guān)于在go語言中使用protobuf的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。

簡介

本文主要給大家介紹了關(guān)于go語言安裝使用protobuf的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。

protobuf是Google開發(fā)出來的一個語言無關(guān)、平臺無關(guān)的數(shù)據(jù)序列化工具,在rpc或tcp通信等很多場景都可以使用。通俗來講,如果客戶端和服務(wù)端使用的是不同的語言,那么在服務(wù)端定義一個數(shù)據(jù)結(jié)構(gòu),通過protobuf轉(zhuǎn)化為字節(jié)流,再傳送到客戶端解碼,就可以得到對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。這就是protobuf神奇的地方。并且,它的通信效率極高,“一條消息數(shù)據(jù),用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二進(jìn)制序列化的10分之一”。

安裝

編譯安裝protobuf的編譯器protoc

  wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz
  tar zxvf protobuf-2.6.1.tar.gz
  cd protobuf-2.6.1./configure
  make
  make install

        執(zhí)行 protoc  -h 查看安裝是否成功

安裝插件 protoc-gen-go,它是一個go程序,編譯它之后將可執(zhí)行文件執(zhí)行路徑寫入環(huán)境變量

go get github.com/golang/protobuf/protoc-gen-go

獲取proto包

go get github.com/golang/protobuf/proto

在go中使用

protobuf的使用方法是將數(shù)據(jù)結(jié)構(gòu)寫入到.proto文件中,使用protoc編譯器編譯(間接使用了插件)得到一個新的go包,里面包含go中可以使用的數(shù)據(jù)結(jié)構(gòu)和一些輔助方法。

編寫test.proto文件

 package example;
 
 enum FOO { X = 17; };
 
 message Test {
  required string label = 1;
  optional int32 type = 2 [default=77];
  repeated int64 reps = 3;
  optional group OptionalGroup = 4 {
  required string RequiredField = 5;
  }
 }

    編譯:

    執(zhí)行 protoc --go_out=. *.proto 生成 test.pb.go 文件

    將test.pb.go文件放入example文件夾(對應(yīng)上面package)中,作為example包

try

 package main

 import (
  "log"

  "github.com/golang/protobuf/proto"
  "example"
 )

 func main() {
  test := &example.Test {
   Label: proto.String("hello"),
   Type: proto.Int32(17),
   Reps: []int64{1, 2, 3},
   Optionalgroup: &example.Test_OptionalGroup {
    RequiredField: proto.String("good bye"),
   },
  }
  data, err := proto.Marshal(test)
  if err != nil {
   log.Fatal("marshaling error: ", err)
  }
  newTest := &example.Test{}
  err = proto.Unmarshal(data, newTest)
  if err != nil {
   log.Fatal("unmarshaling error: ", err)
  }
  // Now test and newTest contain the same data.
  if test.GetLabel() != newTest.GetLabel() {
   log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel())
  }
  //test.GetOptionalgroup().GetRequiredField()
  //etc
 }

一些對應(yīng)關(guān)系

  • message Test對為 struct 結(jié)構(gòu),其屬性字段有了對應(yīng)的get方法,在go中可以使用test.GetLabel() 、test.GetType()獲取test對象的屬性
  • OptionalGroup對應(yīng)為 struct中的內(nèi)嵌struct
  • proto文件中repeated屬性對于slice結(jié)構(gòu)
  • test.Reset()可以使其所有屬性置為0值
  • 使用Marshal和Unmarshal可以輕松的編碼和解碼

這些只是一些特性,想要仔細(xì)研究可以查看github上的wiki:https://github.com/golang/protobuf

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Go 實現(xiàn)基于Token 的登錄流程深度分析

    Go 實現(xiàn)基于Token 的登錄流程深度分析

    Token 認(rèn)證機制的核心思想是,服務(wù)端在用戶登錄時生成一個 Token,客戶端在后續(xù)的請求中攜帶這個 Token,服務(wù)端通過驗證 Token 的有效性來確認(rèn)用戶的身份,本文將帶你深入探索基于 Token 的登錄流程,這是一種更為靈活且適用于現(xiàn)代應(yīng)用架構(gòu)的認(rèn)證方式
    2024-03-03
  • golang中range在slice和map遍歷中的注意事項

    golang中range在slice和map遍歷中的注意事項

    今天小編就為大家分享一篇關(guān)于golang中range在slice和map遍歷中的注意事項,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • VSCode必裝Go語言以下插件的思路詳解

    VSCode必裝Go語言以下插件的思路詳解

    這篇文章主要介紹了VSCode必裝Go語言以下插件的思路詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫

    golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫

    這篇文章主要為大家介紹了golang cobra使用chatgpt qdrant實現(xiàn)ai知識庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go1.21新增cmp包的用法詳解

    Go1.21新增cmp包的用法詳解

    Go?1.21新增的?cmp?包提供了與比較有序值相關(guān)的類型和函數(shù),前幾篇文章講解的?slices?包中的函數(shù)有大量使用到?cmp?包中的函數(shù)和類型,下面我們就來看看cmp包的相關(guān)函數(shù)用法吧
    2023-08-08
  • golang原生實現(xiàn)JWT的示例代碼

    golang原生實現(xiàn)JWT的示例代碼

    在Go中實現(xiàn)JWT驗證,可以通過標(biāo)準(zhǔn)庫crypto/hmac、crypto/sha256和encoding/base64來編寫自己的JWT,本文就詳細(xì)的來介紹一下,感興趣的可以了解下
    2023-05-05
  • golang之JWT實現(xiàn)的示例代碼

    golang之JWT實現(xiàn)的示例代碼

    這篇文章主要介紹了golang之JWT實現(xiàn)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Go Run, Go Build, Go Install的區(qū)別

    Go Run, Go Build, Go Install的區(qū)別

    本文深入探討Go語言中g(shù)orun、gobuild和goinstall三個常用命令的功能區(qū)別和適用場景,文中通過具體代碼示例,詳細(xì)解釋了各命令的使用方式及其應(yīng)用場景,幫助開發(fā)者高效利用這些工具
    2024-10-10
  • Go-RESTful實現(xiàn)下載功能思路詳解

    Go-RESTful實現(xiàn)下載功能思路詳解

    這篇文章主要介紹了Go-RESTful實現(xiàn)下載功能,文件下載包括文件系統(tǒng)IO和網(wǎng)絡(luò)IO,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • Go語言獲取系統(tǒng)性能數(shù)據(jù)gopsutil庫的操作

    Go語言獲取系統(tǒng)性能數(shù)據(jù)gopsutil庫的操作

    這篇文章主要介紹了Go語言獲取系統(tǒng)性能數(shù)據(jù)gopsutil庫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

沈阳市| 广平县| 吉木萨尔县| 聂拉木县| 宁阳县| 鸡西市| 武胜县| 多伦县| 恩施市| 华阴市| 陇西县| 应城市| 金昌市| 新源县| 巢湖市| 壶关县| 哈巴河县| 龙门县| 巫溪县| 洛宁县| 合阳县| 蕉岭县| 定襄县| 师宗县| 隆子县| 广昌县| 呼和浩特市| 晋城| 小金县| 大方县| 汪清县| 韩城市| 四子王旗| 富源县| 土默特左旗| 六盘水市| 襄樊市| 威海市| 蒲江县| 舟山市| 浦县|