胖sir:不知道你有沒有這樣的疑惑,工作中發現很多新接觸GO的小夥伴安裝protoc的環境需要折騰很久
剛開始我裝環境的時候也是花了好長時間,最後如何裝好的也不知原因,網上查詢了各種資源,也沒有一篇文章可以很好的解決這個問題.
兵長:這個好說,今天我們們就來梳理和總結一下,如何快速高效的安裝好protoc的環境
前提,先介紹一下protoc是幹啥的?
簡而言之,protoc是用於將proto檔案程式設計成各種語言原始碼檔案的工具
例如此處我們可以將proto
檔案通過protoc工具,編譯生成適用於GO語言開發的原始碼檔案xxx.pb.go
,一般會和GRPC進行配套使用,如果對這個感興趣,可以在後臺留言哦,此處暫且先單一說明一下protoc的環境如何一次性搞定
目前看來windows上的protoc安裝相對來說疑問還是比較多的,其實安裝還是非常簡單的,我們就來說說吧
1、下載最新版的golang安裝程式
2、 解壓,把GOPATH的路徑新增到環境變數
例如:要是不知道GOPATH在哪裡獲取, 可以在終端裡面敲入go env
進行檢視
3、命令列執行
go get github.com/golang/protobuf
若如上命令執行失敗,請配置代理
go env -w GO111MODULE=on //開啟模組
go env -w GOPROXY=https://goproxy.cn,direct //啟用代理
4、%GOPATH%/src/github.com/golang/protobufxxxxx/protoc-gen-go
go build
go install
執行之後,看到自己GOPATH/bin
目錄下會生成如下程式,說明環境配置成功
5、開始使用protoc
目錄結構為:
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外掛,具體的使用方式,感興趣的可以後臺私信小魔童哪吒哦
以上為本期全部內容,如有疑問可以在評論區或後臺提出你的疑問,我們一起交流,一起成長。
好傢伙要是文章對你還有點作用的話,請幫忙點個關注,分享到你的朋友圈,分享技術,分享快樂
技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。
作者:小魔童哪吒
本作品採用《CC 協議》,轉載必須註明作者和本文連結