這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
json與protobuf做資料轉送對比:
json用起來的確很方便。但相對於protobuf資料量更大些。做一個移動端應用,為使用者省點流量還是很有必要的。正好也可以學習一下protobuf的使用
0、跟Json相比,protobuf 的優缺點:
優點:
- 效能更高,更加規範;
- 編解碼速度快,資料體積小;
- 使用統一的規範,不用再擔心大小寫不同導致解析失敗等問題。
缺點:
- 失去了一些便利性;
- 改動協議欄位,需要重建檔案;
- 資料沒有可讀性;
1、安裝protobuf庫檔案
方法(1)使用go get
go get github.com/golang/protobuf/proto(待驗證)
方法(2)下載檔案
或者直接通過protobuf下載連結,戳這裡上下載或git clone下來對應放到到 $GOPATH\src\golang.org\x\protobuf 中(可用)
2、protobuf的編譯器protoc
在protoc下載連結,戳這裡上找到protoc的壓縮包下載。並放到$GOROOT的bin目錄下。
3、protobuf的編譯器protoc
在go中使用protobuf,有兩個可選用的包goprotobuf(go官方出品)和gogoprotobuf(二選一即可)。
gogoprotobuf完全相容google protobuf,它產生的程式碼品質和編解碼效能均比goprotobuf高一些。
使用protobuf:
go get github.com/golang/protobuf/protoc-gen-go
使用gogoprotobuf:(待驗證)
gogoprotobuf有兩個外掛程式可以使用(二選一即可):
- protoc-gen-gogo:和protoc-gen-go產生的檔案差不多,效能也幾乎一樣(稍微快一點點)
- protoc-gen-gofast:產生的檔案更複雜,效能也更高(快5-7倍)
//gogo
go get github.com/gogo/protobuf/protoc-gen-gogo
//gofast
go get github.com/gogo/protobuf/protoc-gen-gofast
//安裝gogoprotobuf庫檔案
go get github.com/gogo/protobuf/proto
go get github.com/gogo/protobuf/gogoproto //這個不裝也沒關係
//產生編譯檔案
//gogo
protoc --gogo_out=. *.proto
//gofast
protoc --gofast_out=. *.proto
成功後會在GOPATH的第一個目錄的bin檔案夾下產生protoc-gen-go可執行檔(如果該路徑沒在系統的環境變數中,則需要將改路徑也加入到環境變數的path中去)。
4、使用protoc編譯.proto檔案成.pd.go檔案
命令列進入.proto檔案所在路徑,使用 命令:
protoc --go_out=. *.proto
會把.pd.go檔案產生到目前的目錄下,即完成編譯過程。