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

Goland中Protobuf的安裝、配置和使用

 更新時(shí)間:2022年05月26日 11:06:19   作者:starine  
本文記錄了mac環(huán)境下protobuf的編譯安裝,并通過(guò)一個(gè)示例來(lái)演示proto自動(dòng)生成go代碼,本文使用的mac?os?12.3系統(tǒng),不建議使用homebrew安裝,系統(tǒng)版本太高,會(huì)安裝報(bào)錯(cuò),所以自己下載新版壓縮包編譯構(gòu)建安裝

引言

本文記錄了mac環(huán)境下protobuf的編譯安裝,并通過(guò)一個(gè)示例來(lái)演示proto自動(dòng)生成go代碼。

本文使用的mac os 12.3系統(tǒng),不建議使用homebrew安裝,系統(tǒng)版本太高,會(huì)安裝報(bào)錯(cuò),所以自己下載新版壓縮包編譯構(gòu)建安裝。

1、安裝protobuf編譯器

官方github 選擇適合自己系統(tǒng)的Proto編譯器程序進(jìn)行下載安裝

本文使用的mac os 12.3系統(tǒng),不建議使用homebrew安裝,系統(tǒng)版本太高,會(huì)報(bào)錯(cuò),所以自己下載壓縮包構(gòu)建安裝。

  • 下載地址:鏈接: https://pan.baidu.com/s/1NIMErRKrP3-DNmvA8SgKxg  提取碼: 27av 

如需壓縮包請(qǐng)?jiān)谠u(píng)論區(qū)留言。

2.在/usr/local/下新建文件夾protobuf

3.將下載文件拷貝到:/usr/local/protobuf/

4.配置環(huán)境變量:

vim ~/.bash_profile

增加:

# protobuf
export PROTOBUF=/usr/local/protobuf
export PATH=$PROTOBUF/bin:$PATH

使環(huán)境變量生效:

source ~/.bash_profile

解壓:

tar zxvf protobuf-all-3.20.1.tar.gz

cd 進(jìn)入 protobuf-3.20.1/目錄下,在終端按順序執(zhí)行:

sudo ./configure
sudo make
sudo make check
sudo make install

執(zhí)行命令:protoc --version 檢查是否安裝成功

2、下載protobuf的golang支持庫(kù),安裝protoc-gen-go

protoc-gen-go用來(lái)將 .proto 文件轉(zhuǎn)換為 Golang 代碼。

在終端運(yùn)行命令:

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

這條命令會(huì)安裝,并將protoc-gen-go可執(zhí)行文件復(fù)制到$GOBIN文件夾下

注意:原來(lái)的github.com/golang/protobuf/protoc-gen-go這個(gè)庫(kù)已經(jīng)被棄用,我們需要使用 google.golang.org/protobuf 這個(gè)庫(kù)

% go get -u github.com/golang/protobuf/protoc-gen-go
go: module github.com/golang/protobuf is deprecated: Use the "google.golang.org/protobuf" module instead.
go: added github.com/golang/protobuf v1.5.2
go: added google.golang.org/protobuf v1.28.0

3、protobuf使用示例

1、新建一個(gè)go moudle項(xiàng)目,創(chuàng)建擴(kuò)展名為.proto的文件,并編寫代碼。比如創(chuàng)建idl/user.proto文件,內(nèi)容如下:

syntax = "proto3";
package user;
option go_package ="./user";
message User {
  int64 user_id = 1;
  string user_name = 2;
  string password = 3;
}

2、編譯.proto文件,生成Go語(yǔ)言文件。執(zhí)行如下命令:

protoc --go_out=. ./idl/*.proto

將會(huì)自動(dòng)生成對(duì)應(yīng)的user目錄,存放生成的user.pb.go文件:

3、在main程序中使用Protobuf生成的代碼:

使用proto將user序列化輸出out,在將out反序列化成user

package main
import (
   "encoding/json"
   "fmt"
   "github.com/starine/go-protoc-example/user"
   "google.golang.org/protobuf/proto"
   "log"
)
func main() {
   fmt.Println("Hello World. \n")
   user1 := user.User{}
   user1.Password = "123456"
   user1.UserName = "starine"
   bytes, _ := json.Marshal(user1)
   fmt.Println(string(bytes))
   //序列化user結(jié)構(gòu)體數(shù)據(jù)
   out, err := proto.Marshal(&user1)
   if err != nil {
      log.Fatalln("Failed to encode User:", err)
   }
   fmt.Println(out)
   //反序列化user結(jié)構(gòu)體
   user2 := user.User{}
   err = proto.Unmarshal(out, &user2)
   if err!=nil {
      log.Fatalln("Failed to parse User:", err)
   }
   bytes, _ = json.Marshal(user2)
   fmt.Println(string(bytes))
}

運(yùn)行結(jié)果:

% go run main.go
Hello World. 

{"user_name":"starine","password":"123456"}
[18 7 115 116 97 114 105 110 101 26 6 49 50 51 52 53 54]
{"user_name":"starine","password":"123456"}

Process finished with the exit code 0

到此這篇關(guān)于Goland中Protobuf的安裝、配置和使用的文章就介紹到這了,更多相關(guān)Protobuf安裝使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用dep 配置golang 開(kāi)發(fā)環(huán)境的操作方法

    使用dep 配置golang 開(kāi)發(fā)環(huán)境的操作方法

    下面小編就為大家?guī)?lái)一篇使用dep 配置golang 開(kāi)發(fā)環(huán)境的操作方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Golang 數(shù)據(jù)庫(kù)操作(sqlx)和不定字段結(jié)果查詢

    Golang 數(shù)據(jù)庫(kù)操作(sqlx)和不定字段結(jié)果查詢

    本文主要介紹了Golang 數(shù)據(jù)庫(kù)操作(sqlx)和不定字段結(jié)果查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Golang Defer基礎(chǔ)操作詳解

    Golang Defer基礎(chǔ)操作詳解

    在golang當(dāng)中,defer代碼塊會(huì)在函數(shù)調(diào)用鏈表中增加一個(gè)函數(shù)調(diào)用。這個(gè)函數(shù)調(diào)用不是普通的函數(shù)調(diào)用,而是會(huì)在函數(shù)正常返回,也就是return之后添加一個(gè)函數(shù)調(diào)用。因此,defer通常用來(lái)釋放函數(shù)內(nèi)部變量
    2022-10-10
  • Golang信號(hào)量設(shè)計(jì)實(shí)現(xiàn)示例詳解

    Golang信號(hào)量設(shè)計(jì)實(shí)現(xiàn)示例詳解

    這篇文章主要為大家介紹了Golang信號(hào)量設(shè)計(jì)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 一文帶你深入理解Golang中的泛型

    一文帶你深入理解Golang中的泛型

    Go?在泛型方面一直被詬病,因?yàn)樗谶@方面相對(duì)比較落后。但是,在?Go?1.18?版本中,泛型已經(jīng)被正式引入,成為了?Go?語(yǔ)言中一個(gè)重要的特性。本文將會(huì)詳細(xì)介紹?Go?泛型的相關(guān)概念,語(yǔ)法和用法,希望能夠幫助大家更好地理解和應(yīng)用這一特性
    2023-05-05
  • 詳解Golang Iris框架的基本使用

    詳解Golang Iris框架的基本使用

    這篇文章主要介紹了Golang Iris框架的基本使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2020-11-11
  • Go語(yǔ)言利用Unmarshal解析json字符串的實(shí)現(xiàn)

    Go語(yǔ)言利用Unmarshal解析json字符串的實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言利用Unmarshal解析json字符串的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn)

    golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn)

    這篇文章主要介紹了golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Go中各種newreader和newbuffer的使用總結(jié)

    Go中各種newreader和newbuffer的使用總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中各種newreader和newbuffer的使用的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解下
    2023-11-11
  • Go語(yǔ)言學(xué)習(xí)之運(yùn)算符使用詳解

    Go語(yǔ)言學(xué)習(xí)之運(yùn)算符使用詳解

    這篇文章主要介紹了Go語(yǔ)言中常用運(yùn)算符的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

津市市| 东莞市| 友谊县| 东乌| 嘉峪关市| 淮北市| 奉贤区| 贡嘎县| 确山县| 澜沧| 双城市| 宝丰县| 北票市| 定陶县| 巴楚县| 宜城市| 旬阳县| 正宁县| 安龙县| 万州区| 扶风县| 沅江市| 哈尔滨市| 潼关县| 盐津县| 南宁市| 依兰县| 绵竹市| 武夷山市| 富锦市| 义乌市| 科技| 延川县| 南皮县| 阆中市| 工布江达县| 汉阴县| 扎兰屯市| 和田市| 黔东| 西乡县|