Protobuf:从www.example.com导入已知类型(如timestamp)google.golang.org/protobuf

yrdbyhpb  于 2023-04-03  发布在  Go
关注(0)|答案(1)|浏览(144)

到目前为止,我一直在使用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";

当我运行protocv3.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依赖关系。

c9qzyr3d

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-goprotoc-gen-go-grpc,当你在它,更新protocv3.12.4)是旧的(2020年7月)。新插件将生成正确引用谷歌提供的新GWT Go存根的Go存根。
发生API切换的protoc-gen-go版本是1.4.0,请参阅“概述”。
原型import引用(例如google/protobuf/timestamp.proto更改。

相关问题