首頁 > 軟體

Goland中Protobuf的安裝、設定和使用

2022-05-26 14:01:42

引言

本文記錄了mac環境下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 

如需壓縮包請在評論區留言。

2.在/usr/local/下新建資料夾protobuf

3.將下載檔案拷貝到:/usr/local/protobuf/

4.設定環境變數:

vim ~/.bash_profile

增加:

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

使環境變數生效:

source ~/.bash_profile

解壓:

tar zxvf protobuf-all-3.20.1.tar.gz

cd 進入 protobuf-3.20.1/目錄下,在終端按順序執行:

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

執行命令: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可執行檔案複製到$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專案,建立擴充套件名為.proto的檔案,並編寫程式碼。比如建立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語言檔案。執行如下命令:

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安裝使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com