协议缓冲区文件中使用的 go_package 选项是什么?
What is the go_package option used for in a protocol buffer file?
我做了一些研究,包括查看来自 google 的官方文档,但我找不到对 go_package
选项的用途的很好解释。官方文档说明如下:
The .proto
file should contain a go_package option specifying the full import path of the Go package that contains the generated code.
我想我对导入路径的含义感到困惑。这听起来更像是一个导出路径,因为我们想把生成的代码放在哪里?但是,如果我们可以在 --go_out=
期间指定输出路径,为什么我们需要这个?所以我无法理解为什么你需要在 proto 文件中指定导出路径,同时在 option go_package
?
中指定输出路径
声明生成代码的预期导入路径对于其他 protobuf 文件了解如何在生成的代码中引用这些类型很重要。
如果您的所有 protobuf 定义都在单个 .proto
文件中声明,则导入路径意义不大,因为它们隐式共享同一个 go 包。如果你在多个包中启动 storing/generating protobuf 文件,它们需要知道如何找到彼此。
查看“众所周知”类型的 protobuf 就是一个很好的例子:
https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
该文件的顶部包含以下包声明:
option go_package = "google.golang.org/protobuf/types/known/timestamppb";
如果我在另一个 protobuf 文件中使用该消息:
import "google/protobuf/timestamp.proto";
message MyModel {
google.protobuf.Timestamp ts = 1;
}
我为 MyModel
生成的文件将在 .pb.go
文件的顶部包含一个导入语句,如下所示:
import timestamppb "google.golang.org/protobuf/types/known/timestamppb"
我做了一些研究,包括查看来自 google 的官方文档,但我找不到对 go_package
选项的用途的很好解释。官方文档说明如下:
The
.proto
file should contain a go_package option specifying the full import path of the Go package that contains the generated code.
我想我对导入路径的含义感到困惑。这听起来更像是一个导出路径,因为我们想把生成的代码放在哪里?但是,如果我们可以在 --go_out=
期间指定输出路径,为什么我们需要这个?所以我无法理解为什么你需要在 proto 文件中指定导出路径,同时在 option go_package
?
声明生成代码的预期导入路径对于其他 protobuf 文件了解如何在生成的代码中引用这些类型很重要。
如果您的所有 protobuf 定义都在单个 .proto
文件中声明,则导入路径意义不大,因为它们隐式共享同一个 go 包。如果你在多个包中启动 storing/generating protobuf 文件,它们需要知道如何找到彼此。
查看“众所周知”类型的 protobuf 就是一个很好的例子:
https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/timestamp.proto
该文件的顶部包含以下包声明:
option go_package = "google.golang.org/protobuf/types/known/timestamppb";
如果我在另一个 protobuf 文件中使用该消息:
import "google/protobuf/timestamp.proto";
message MyModel {
google.protobuf.Timestamp ts = 1;
}
我为 MyModel
生成的文件将在 .pb.go
文件的顶部包含一个导入语句,如下所示:
import timestamppb "google.golang.org/protobuf/types/known/timestamppb"