Goland中Protobuf的安裝、配置和使用
引言
本文記錄了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ū)別說明
本文主要講述os.Mkdir、os.MkdirAll區(qū)別以及在創(chuàng)建文件目錄過程中的一些其他技巧,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Golang迭代如何在Go中循環(huán)數據結構使用詳解
這篇文章主要為大家介紹了Golang迭代之如何在Go中循環(huán)數據結構使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10golang string、int、int64 float 互相轉換方式
這篇文章主要介紹了golang string、int、int64 float 互相轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07