使用Go语言的API,Protocol Buffers的APIv1和APIv2之间有什么区别

关于这篇文章

由于 Protocol Buffers 在 Go 语言的 API 中发布了新的 V2 (APIv2),导致了 import 路径、仓库和 protoc-gen-go 等方面出现了一些混乱,因此我们来进行整理。

[2021/2/13更新]
在初次投稿时(2020/05/11),尚未发布适用于APIv2的protoc-gen-go-grpc,但在2020年10月发布了该版本,因此我进行了更新。

关于使用Go语言API的Protocol Buffers

Protocol Buffers(以下简称protobuf)是一种语言中立的数据序列化机制,Go语言也提供了用于使用protobuf的API。

最初的 API 在约2010年提供,把它称为 APIv1。
随后,在2020年3月发布了新的 APIv2。

APIv2的简要特点:

    • *.proto ファイルで定義された protobuf のアノテーションを Go から読めるようにした

 

    • APIv2 は後方互換性はない

APIv1 は今後もずっとサポートを継続する(原文: We intend to maintain support for APIv1 indefinitely.)

关于[补充] protoc-gen-go
编译*.proto文件需要使用一个名为protoc的编译器,但protobuf本身是语言中立的,因此需要一个名为protoc-gen-go的插件来生成Go语言的代码。protoc-gen-go和下文中提到的gRPC stub代码生成也有APIv1和APIv2之间的差异。

APIv1和APIv2的差异

APIv1的意思是应用程序编程接口版本1。

    • 最新バージョンは v1.4 系

v1.4.0 から内部的には APIv2 を使って実装されている

APIv1 の import パス等は以下を参照

対象値import のパスgithub.com/golang/protobufソースのリポジトリhttps://github.com/golang/protobufprotoc-gen-gogithub.com/golang/protobuf/protoc-gen-gogRPCスタブコード生成同上

APIv2可以用中文来解释为应用程序接口版本2。

    • バージョンは v1.20.0 から始まる

APIv1 のバージョンが 1.20 まで進まないだろうという予想とのこと

APIv2 の import パス等は以下を参照

対象値import のパスgoogle.golang.org/protobufソースのリポジトリhttps://github.com/protocolbuffers/protobuf-goprotoc-gen-gogoogle.golang.org/protobuf/cmd/protoc-gen-gogRPCスタブコード生成google.golang.org/grpc/cmd/protoc-gen-go-grpc

关于 protoc-gen-go 和 gRPC 的存根代码生成

如果是APIv1的情况下

在 APIv1 中,我们可以在 protoc 命令中加入 –go_out=plugins=grpc 选项,以便生成 gRPC 存根代码给 protoc-gen-go 工具使用。

protoc --go_out=plugins=grpc:. sample.proto

对于APIv2的情况

APIv2版本的 protoc-gen-go 不再生成 gRPC 的存根代码,需要额外安装 protoc-gen-go-grpc 插件。

export GO111MODULE=on
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
protoc --go_out=. --go-grpc_out=. sample.proto

请提供更多的上下文信息来帮助我准确地回答你的问题。

    • A new Go API for Protocol Buffers

 

    • Goが新たなリフレクションベースのProtocol Buffer APIを獲得

 

    Go Protocol Buffer Message API V2 のReflectionとgRPC Server-side Interceptorを使ってAPIの呼び出し権限チェックを実現する
广告
将在 10 秒后关闭
bannerAds