到目前为止,我一直在使用github.com/golang/protobuf
。今天我收到了module github.com/golang/protobuf is deprecated: Use the "google.golang.org/protobuf" module instead.
的警告,所以我照做了,过渡顺利。但我的项目仍然依赖于github.com/golang/protobuf
,我想摆脱的仓库。原因是我在.proto
文件中使用了已知类型:
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
当我运行protoc
(v3.12.4
)来生成相应的Go文件时,这将被解析为
import (
timestamp "github.com/golang/protobuf/ptypes/timestamp"
wrappers "github.com/golang/protobuf/ptypes/wrappers"
)
,导致弃用的依赖项仍在使用。不确定这是否重要,但我依赖这些protoc
插件:
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.30.0
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0
,据我所知,这是最新的。
在寻找最新的timestamp
类型时,我偶然发现了https://pkg.go.dev/google.golang.org/protobuf/types/known/timestamppb。url表明它可能属于所需的google.golang.org/protobuf
包,但我不知道如何正确导入它。底层github repo包含一个自述文件,告诉我:
types/known/timestamppb: Package timestamppb is the generated package for google/protobuf/timestamp.proto.
但是google/protobuf/timestamp.proto
是我当前在.proto
文件中使用的导入,并且我仍然以import timestamp "github.com/golang/protobuf/ptypes/timestamp"
结束,这是一个弃用的依赖项。
我不知道如何解决所有这些依赖关系,我不知道在哪里可以找到缺失的部分来摆脱github.com/golang/protobuf
依赖关系。
1条答案
按热度按时间c9qzyr3d1#
这很令人困惑,因为Google为Go做了v1(
github.com/golang/protobuf
)到v2(google.golang.org/protobuf
)的更改。v2的README提供了一个很好的概要,还有一篇关于这个的博客文章(我再也找不到了),但请参阅A New Go API for Protocol Buffers。
这个变化(到v2)还包括新的(生成的)Go(!)包,用于Google的Well-Known Types。
这个变化的一个后果是,你应该更新
protoc-gen-go
和protoc-gen-go-grpc
,当你在它,更新protoc
(v3.12.4)是旧的(2020年7月)。新插件将生成正确引用谷歌提供的新GWT Go存根的Go存根。发生API切换的
protoc-gen-go
版本是1.4.0
,请参阅“概述”。原型
import
引用(例如google/protobuf/timestamp.proto
)未更改。