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

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

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

引言

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

本文使用的mac os 12.3系統,不建議使用homebrew安裝,系統版本太高,會安裝報錯,所以自己下載新版壓縮包編譯構建安裝。

1、安裝protobuf編譯器

官方github 選擇適合自己系統的Proto編譯器程序進行下載安裝

本文使用的mac os 12.3系統,不建議使用homebrew安裝,系統版本太高,會報錯,所以自己下載壓縮包構建安裝。

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

如需壓縮包請在評論區(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 進入 protobuf-3.20.1/目錄下,在終端按順序執(zhí)行:

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

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

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

protoc-gen-go用來將 .proto 文件轉換為 Golang 代碼。

在終端運行命令:

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

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

注意:原來的github.com/golang/protobuf/protoc-gen-go這個庫已經被棄用,我們需要使用 google.golang.org/protobuf 這個庫

% 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、新建一個go moudle項目,創(chuàng)建擴展名為.proto的文件,并編寫代碼。比如創(chuàng)建idl/user.proto文件,內容如下:

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

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

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

將會自動生成對應的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結構體數據
   out, err := proto.Marshal(&user1)
   if err != nil {
      log.Fatalln("Failed to encode User:", err)
   }
   fmt.Println(out)
   //反序列化user結構體
   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))
}

運行結果:

% 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

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

相關文章

  • golang創(chuàng)建文件目錄os.Mkdir,os.MkdirAll的區(qū)別說明

    golang創(chuàng)建文件目錄os.Mkdir,os.MkdirAll的區(qū)別說明

    本文主要講述os.Mkdir、os.MkdirAll區(qū)別以及在創(chuàng)建文件目錄過程中的一些其他技巧,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • go語言實現http服務端與客戶端的例子

    go語言實現http服務端與客戶端的例子

    今天小編就為大家分享一篇go語言實現http服務端與客戶端的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Go Java算法最大單詞長度乘積示例詳解

    Go Java算法最大單詞長度乘積示例詳解

    這篇文章主要為大家介紹了Go Java算法最大單詞長度乘積示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解Golang中string的實現原理與高效使用

    詳解Golang中string的實現原理與高效使用

    在Go語言中,無論是字符串常量、字符串變量還是代碼中出現的字符串字面量,它們的類型都被統一設置為string,下面就跟隨小編一起來了解一下Golang中string的實現原理與高效使用吧
    2024-01-01
  • Golang迭代如何在Go中循環(huán)數據結構使用詳解

    Golang迭代如何在Go中循環(huán)數據結構使用詳解

    這篇文章主要為大家介紹了Golang迭代之如何在Go中循環(huán)數據結構使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 詳解如何通過Go來操作Redis實現簡單的讀寫操作

    詳解如何通過Go來操作Redis實現簡單的讀寫操作

    作為最常用的分布式緩存中間件——Redis,了解運作原理和如何使用是十分有必要的,今天來學習如何通過Go來操作Redis實現基本的讀寫操作,需要的朋友可以參考下
    2023-09-09
  • golang string、int、int64 float 互相轉換方式

    golang string、int、int64 float 互相轉換方式

    這篇文章主要介紹了golang string、int、int64 float 互相轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 深入理解Go設計模式之代理模式

    深入理解Go設計模式之代理模式

    代理模式是一種結構型設計模式,?其中代理控制著對于原對象的訪問,?并允許在將請求提交給原對象的前后進行一些處理,從而增強原對象的邏輯處理,這篇文章主要來學習一下代理模式的構成和用法,需要的朋友可以參考下
    2023-05-05
  • 一文帶你了解Go語言中鎖的實現

    一文帶你了解Go語言中鎖的實現

    這篇文章主要帶大家一起學習一下go鎖和讀寫鎖的總結文檔,?主要從"參考"部分的文章結合源碼學習,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • Go語言的IO庫那么多糾結該如何選擇

    Go語言的IO庫那么多糾結該如何選擇

    在Go語言中涉及 I/O 操作的內置庫有很多種,比如: io 庫, os 庫, ioutil 庫, bufio 庫, bytes 庫, strings 庫等等。擁有這么多內置庫是好事,但是具體到涉及 I/O 的場景我們應該選擇哪個庫呢,帶著這個問題一起通過本文學習下吧
    2021-06-06

最新評論