Goland中Protobuf的安裝、配置和使用
引言
本文記錄了mac環(huán)境下protobuf的編譯安裝,并通過一個示例來演示proto自動生成go代碼。
本文使用的mac os 12.3系統(tǒng),不建議使用homebrew安裝,系統(tǒng)版本太高,會安裝報錯,所以自己下載新版壓縮包編譯構(gòu)建安裝。
1、安裝protobuf編譯器
在 官方github 選擇適合自己系統(tǒng)的Proto編譯器程序進(jìn)行下載安裝
本文使用的mac os 12.3系統(tǒng),不建議使用homebrew安裝,系統(tǒng)版本太高,會報錯,所以自己下載壓縮包構(gòu)建安裝。
- 下載地址:鏈接: 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 進(jìn)入 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
文件轉(zhuǎn)換為 Golang 代碼。
在終端運行命令:
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
這條命令會安裝,并將protoc-gen-go
可執(zhí)行文件復(fù)制到$GOBIN
文件夾下
注意:原來的github.com/golang/protobuf/protoc-gen-go
這個庫已經(jīng)被棄用,我們需要使用 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)建擴(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語言文件。執(zhí)行如下命令:
protoc --go_out=. ./idl/*.proto
將會自動生成對應(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)) }
運行結(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang創(chuàng)建文件目錄os.Mkdir,os.MkdirAll的區(qū)別說明
本文主要講述os.Mkdir、os.MkdirAll區(qū)別以及在創(chuàng)建文件目錄過程中的一些其他技巧,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03go語言實現(xiàn)http服務(wù)端與客戶端的例子
今天小編就為大家分享一篇go語言實現(xiàn)http服務(wù)端與客戶端的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08詳解Golang中string的實現(xiàn)原理與高效使用
在Go語言中,無論是字符串常量、字符串變量還是代碼中出現(xiàn)的字符串字面量,它們的類型都被統(tǒng)一設(shè)置為string,下面就跟隨小編一起來了解一下Golang中string的實現(xiàn)原理與高效使用吧2024-01-01Golang迭代如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解
這篇文章主要為大家介紹了Golang迭代之如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10詳解如何通過Go來操作Redis實現(xiàn)簡單的讀寫操作
作為最常用的分布式緩存中間件——Redis,了解運作原理和如何使用是十分有必要的,今天來學(xué)習(xí)如何通過Go來操作Redis實現(xiàn)基本的讀寫操作,需要的朋友可以參考下2023-09-09golang string、int、int64 float 互相轉(zhuǎn)換方式
這篇文章主要介紹了golang string、int、int64 float 互相轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07