gpt4 book ai didi

go - XXX_* 输入生成的 *.pb.go 文件

转载 作者:IT王子 更新时间:2023-10-29 00:41:16 26 4
gpt4 key购买 nike

我正在研究 tutorial关于 gRPC。当我生成 .pb.go 文件时,我在我的结构中得到了一些 XXX_* 类型。

这是我的 consignment.proto 文件:

syntax = "proto3";

package go.micro.srv.consignment;

service ShippingService {
rpc CreateConsignment(Consignment) returns (Response) {}
}

message Consignment {
string id = 1;
string description = 2;
int32 weight = 3;
repeated Container containers = 4;
string vessel_id = 5;
}

message Container {
string id = 1;
string customer_id = 2;
string origin = 3;
string user_id = 4;
}

message Response {
bool created = 1;
Consignment consignment = 2;
}

这是 .pb.go 文件中的结构。谁能告诉我为什么我的 struct 中有 3 个 XXX 类型?结构不应该反射(reflect)我在 proto 中定义的内容吗?

type Consignment struct {
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Description string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"`
Weight int32 `protobuf:"varint,3,opt,name=weight" json:"weight,omitempty"`
Containers []*Container `protobuf:"bytes,4,rep,name=containers" json:"containers,omitempty"`
VesselId string `protobuf:"bytes,5,opt,name=vessel_id,json=vesselId" json:"vessel_id,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}

最佳答案

Protobuf 库使用 XXX_ 类型来存储未知字段。当您解码原型(prototype)时,序列化数据中可能有库不知道如何处理的其他字段。例如,当数据的读取者和写入者使用原始文件的不同副本时,就会发生这种情况。此功能有助于在不同时间构建的客户端和服务之间实现向后兼容性。

此外,XXX 字段允许您公开 extensions , 这是 Proto2 的一部分。它们在 Proto3 中被删除,取而代之的是 Any , 但图书馆仍然需要支持它们。

至于你应该用这些做什么?我会让他们一个人呆着,不要引用他们。您不需要设置它们,也不需要读取它们。 Go protobuf 库将为您处理它们。

关于go - XXX_* 输入生成的 *.pb.go 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50704319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com