博客 / 詳情

返回

go精通protobuf連載二:理解protobuf中protoc與protoc-gen-go的關係

一、protobuf 介紹

Protobuf全稱是Google Protocol Buffer,是一種高效輕便的結構化數據存儲方式,如同xml,json常用來序列化數據,用來存儲以及傳輸。
相當於json和xml,Protobuf佔用的寬帶更小,序列化更快。目前在grpc等服務中,越來越流行。

二、protoc

protoc是 protocol compiler,是protocol 編譯器。
當我們從 https://github.com/protocolbu...官網安裝protobuf後,在命令行,就會有一個 protoc shell腳本命令。
目前 protoc 編譯器支持的語言有以下幾種。
image.png
我們使用protoc 命令行可以把.proto 文件轉譯成各種編程語言對應的源碼,包含數據類型定義、調用接口等。

protoc 命令把.proto文件轉成go的過程有兩步

  1. 解析.proto文件,轉譯成protobuf的原生數據結構在內存中保存;
  2. 把protobuf相關的數據結構傳遞給相應語言的編譯插件,由插件負責根據接收到的protobuf原生結構渲染輸出特定語言的模板。(對應go的protoc-gen-go)

三、protoc-gen-go

在官方文檔裏,
https://pkg.go.dev/github.com...裏説明到
protoc-gen-go 是 Google protobuf編譯器生成 Go 代碼的插件。
安裝成功後再 GOPATH裏可以調用

protoc-gen-go

protoc裏面”go“後綴是調用這個插件,比如生產.pb.go代碼

protoc --go_out=paths=source_relative:. path/to/file.proto

其中"--go_out="表示生成Go文件,protoc會自動尋找GOPATH(默認為系統GOPATH路徑)中的protoc-gen-go執行文件。
執行這個命令會生成.pb.go文件,文件地址如下:

path/to/file.pb.go
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.