[TOC]git
胖sir:不知道你有沒有這樣的疑惑,工做中發現不少新接觸GO的小夥伴安裝protoc的環境須要折騰好久github
剛開始我裝環境的時候也是花了好長時間,最後如何裝好的也不知緣由,網上查找了各類資源,也沒有一篇文章能夠很好的解決這個問題.golang
兵長:這個好說,今天我們就來梳理和總結一下,如何快速高效的安裝好protoc的環境數據庫
前提,先介紹一下protoc是幹啥的?編程
簡而言之,protoc是用於將proto文件編程成各類語言源碼文件的工具windows
例如此處咱們能夠將proto
文件經過protoc工具,編譯生成適用於GO語言開發的源碼文件xxx.pb.go
,通常會和GRPC進行配套使用,若是對這個感興趣,能夠在後臺留言哦,此處暫且先單一說明一下protoc的環境如何一次性搞定app
目前看來windows上的protoc安裝相對來講疑問仍是比較多的,其實安裝仍是很是簡單的,咱們就來講說吧模塊化
https://github.com/protocolbuffers/protobuf/releases/
例如:要是不知道GOPATH在哪裏獲取, 能夠在終端裏面敲入 go env
進行查看工具
go get github.com/golang/protobuf
若如上命令執行失敗,請配置代理ui
go env -w GO111MODULE=on //打開模塊 go env -w GOPROXY=https://goproxy.cn,direct //啓用代理
go build go install
執行以後,看到本身GOPATH/bin
目錄下會生成以下程序,說明環境配置成功
目錄結構爲:
test.proto
syntax="proto3"; //版本號 package mypro; //包名 enum ClassName{ //枚舉 class1=0; //標號 必須從 0開始 class2=1; class3=2; } message Student{ //消息,對應於Go的結構體 string name=1; //1:標號,惟一 便可(至關於數據庫中的Id,不必定要從1 ,2的順序依次排列。) int32 age=2; //必須指定整型的範圍,如int32,int64 string address=3; ClassName cn=4; } message Students{ repeated Student person=1; // repeated 修飾,至關於Go中切片 string school=2; }
執行:protoc --go_out=. *.proto , 會生成 .pb.go文件
main.go
package main import ( "fmt" "github.com/golang/protobuf/proto" "mypro.com/mypro" //引入的proto的包 , go語言中,一個目錄裏面的全部文件都應設置成一個包 ) func main() { s1 := &mypro.Student{} //第一個學生信息 s1.Name = "jz01" s1.Age = 23 s1.Address = "cq" s1.Cn = mypro.ClassName_class2 //枚舉類型賦值 ss := &mypro.Students{} ss.Person = append(ss.Person, s1) //將第一個學生信息添加到Students對應的切片中 s2 := &mypro.Student{} //第二個學生信息 s2.Name = "jz02" s2.Age = 25 s2.Address = "cd" s2.Cn = mypro.ClassName_class3 ss.Person = append(ss.Person, s2) //將第二個學生信息添加到Students對應的切片中 ss.School = "cqu" fmt.Println("Students信息爲:", ss) // Marshal takes a protocol buffer message // and encodes it into the wire format, returning the data. buffer, _ := proto.Marshal(ss) fmt.Println("序列化以後的信息爲:", buffer) // Use UnmarshalMerge to preserve and append to existing data. data := &mypro.Students{} proto.Unmarshal(buffer, data) fmt.Println("反序列化以後的信息爲:", data) }
在main.go的同級目錄 執行 go mod init xxx , 模塊化 如:go mod init mypro.com
在main.go 同級目錄 執行 go build , 若執行成功,則正確解析protobuf
當須要使用到grpc + protobuf的時候,protoc工具編譯proto文件時,須要加上grpc插件,具體的使用方式,感興趣的能夠後臺私信小魔童哪吒哦
以上爲本期所有內容,若有疑問能夠在評論區或後臺提出你的疑問,咱們一塊兒交流,一塊兒成長。
好傢伙要是文章對你還有點做用的話,請幫忙點個關注,分享到你的朋友圈,分享技術,分享快樂
技術是開放的,咱們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
做者:小魔童哪吒