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

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

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

簡介

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

protobuf是Google開發(fā)出來的一個語言無關、平臺無關的數(shù)據(jù)序列化工具,在rpc或tcp通信等很多場景都可以使用。通俗來講,如果客戶端和服務端使用的是不同的語言,那么在服務端定義一個數(shù)據(jù)結構,通過protobuf轉(zhuǎn)化為字節(jié)流,再傳送到客戶端解碼,就可以得到對應的數(shù)據(jù)結構。這就是protobuf神奇的地方。并且,它的通信效率極高,“一條消息數(shù)據(jù),用protobuf序列化后的大小是json的10分之一,xml格式的20分之一,是二進制序列化的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ù)結構寫入到.proto文件中,使用protoc編譯器編譯(間接使用了插件)得到一個新的go包,里面包含go中可以使用的數(shù)據(jù)結構和一些輔助方法。

編寫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文件夾(對應上面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
 }

一些對應關系

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

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

總結

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

相關文章

  • Go語言中struct的匿名屬性特征實例分析

    Go語言中struct的匿名屬性特征實例分析

    這篇文章主要介紹了Go語言中struct的匿名屬性特征,實例分析了struct的匿名屬性特征,對于深入學習Go語言程序設計具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go項目中環(huán)境變量的配置

    go項目中環(huán)境變量的配置

    本文主要介紹了go項目中環(huán)境變量的配置,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • Go語言之嵌入類型詳解

    Go語言之嵌入類型詳解

    本文詳細講解了Go語言之嵌入類型,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Go使用defer函數(shù)要注意的幾個點

    Go使用defer函數(shù)要注意的幾個點

    這篇文章主要介紹了Go使用defer函數(shù)要注意的幾個點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • golang生成vcf通訊錄格式文件詳情

    golang生成vcf通訊錄格式文件詳情

    這篇文章主要介紹了golang生成vcf通訊錄格式文件詳情,?VCF是通訊錄格式文件,一般需要用手機通訊錄導入導出的文件格式都是vcf格式。?下面詳細內(nèi)容介紹需要的小伙伴可以參考一下
    2022-03-03
  • go語言中http超時引發(fā)的事故解決

    go語言中http超時引發(fā)的事故解決

    我們使用的是golang標準庫的http client,對于一些http請求,我們在處理的時候,會考慮加上超時時間,如果超時可能會引起報錯,本文就記一次超時引發(fā)的事故
    2021-06-06
  • goland 設置注釋模板的過程圖文詳解

    goland 設置注釋模板的過程圖文詳解

    這篇文章主要介紹了goland 設置注釋模板的過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-12-12
  • golang架構設計開閉原則手寫實現(xiàn)

    golang架構設計開閉原則手寫實現(xiàn)

    這篇文章主要為大家介紹了golang架構設計開閉原則手寫實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • Golang并發(fā)操作中常見的讀寫鎖詳析

    Golang并發(fā)操作中常見的讀寫鎖詳析

    Golang中的鎖機制主要包含互斥鎖和讀寫鎖互斥鎖互斥鎖是傳統(tǒng)并發(fā)程序?qū)蚕碣Y源進行控制訪問的主要手段,這篇文章主要給大家介紹了關于Golang并發(fā)操作中常見的讀寫鎖的相關資料,需要的朋友可以參考下
    2021-08-08
  • Golang語言如何避免空指針引發(fā)的panic詳解

    Golang語言如何避免空指針引發(fā)的panic詳解

    簡單地說go語言的指針類型和C/C++的指針類型用法是一樣的,除了出去安全性的考慮,go語言增加了一些限制,這篇文章主要給大家介紹了關于Golang語言如何避免空指針引發(fā)panic的相關資料,需要的朋友可以參考下
    2022-01-01

最新評論