基本概念:
Protocol Buffers(通常簡稱為 Protobuf)是一種由 Google 開發的用於序列化結構化資料的語言中立、平臺中立、可擴充套件的機制。它類似於 XML 和 JSON,但更小、更快、更簡單。以下是對 Protocol Buffers 的簡單介紹
主要特點:
語言中立:Protocol Buffers 可以生成多種程式語言的程式碼(如 C++、Java、Python、Go、C# 等),使得不同語言編寫的系統之間可以輕鬆地交換資料。
平臺中立:它可以在不同的作業系統和硬件平臺上使用,確保資料在不同環境中的相容性。
高效的資料序列化:Protocol Buffers 生成的資料格式非常緊湊,比 XML 和 JSON 更小,傳輸和儲存效率更高。序列化和反序列化速度快,適合高效能應用場景。
可擴充套件性:您可以隨時新增新的欄位到數據結構中,而不會破壞現有的程式碼和資料。舊版本的程式碼仍然可以讀取新版本的資料,只要忽略新欄位即可。
定義數據結構:使用 .proto
檔案定義數據結構,描述資料的欄位和型別。例如:
message Person { string name = 1; int32 id = 2; string email = 3; }
如何在 mac 上進行安裝protobuf 和相關 go 外掛:
在 mac 上可以很方便的使用 homebrew 進行安裝。不過需要注意的是,名稱需要注意。
brew install protobuf brew install protoc-gen-go brew install protoc-gen-go-grpc
三個命令分別執行之後等待一段時間久可以下載完成。
驗證安裝結果:
protoc --version protoc-gen-go --version protoc-gen-go-grpc --version
執行上面的命令,能看到命令列,輸出版本資訊,說明已經安裝完成,比如我安裝的版本是 28.2。
libprotoc 28.2 protoc-gen-go v1.35.1 protoc-gen-go-grpc 1.5.1
幾個關鍵的名詞解釋:
Protocol Buffers(Protobuf)、protoc-gen-go
和 protoc-gen-go-grpc
之間的關係可以概括為以下幾點:
Protocol Buffers(Protobuf)
定義:Protocol Buffers 是一種用於序列化結構化資料的語言中立、平臺中立、可擴充套件的機制。
作用:它允許開發者定義數據結構(使用
.proto
檔案),並透過編譯器生成不同程式語言的程式碼,以便在不同系統之間高效地交換資料。
protoc
編譯器
定義:
protoc
是 Protocol Buffers 的編譯器,用於將.proto
檔案編譯成目標程式語言的程式碼。作用:
protoc
讀取.proto
檔案,並生成相應的程式碼檔案,這些程式碼檔案包含了數據結構的定義和序列化/反序列化的方法。
protoc-gen-go
定義:
protoc-gen-go
是一個外掛,用於protoc
編譯器,專門生成 Go 語言的程式碼。作用:當使用
protoc
編譯.proto
檔案時,可以透過指定--go_out
引數來呼叫protoc-gen-go
外掛,生成 Go 語言的程式碼。生成的程式碼包括數據結構的定義、序列化和反序列化的方法。
protoc-gen-go-grpc
定義:
protoc-gen-go-grpc
是另一個外掛,用於protoc
編譯器,專門生成 Go 語言的 gRPC 程式碼。作用:當使用
protoc
編譯.proto
檔案時,可以透過指定--go-grpc_out
引數來呼叫protoc-gen-go-grpc
外掛,生成 Go 語言的 gRPC 程式碼。生成的程式碼包括 gRPC 服務的介面定義、客戶端和伺服器端的程式碼。
關係總結
Protocol Buffers 是定義數據結構和序列化機制的基礎。
protoc
編譯器 是用於將.proto
檔案編譯成不同程式語言程式碼的工具。protoc-gen-go
是protoc
的一個外掛,專門用於生成 Go 語言的程式碼。protoc-gen-go-grpc
是protoc
的另一個外掛,專門用於生成 Go 語言的 gRPC 程式碼。
使用示例
假設你有一個 .proto
檔案 example.proto
,你可以使用以下命令生成 Go 語言的程式碼:
protoc --go_out=. --go-grpc_out=. example.proto
--go_out=.
引數呼叫protoc-gen-go
外掛,生成 Go 語言的基本程式碼。--go-grpc_out=.
引數呼叫protoc-gen-go-grpc
外掛,生成 Go 語言的 gRPC 程式碼。