XXX_ * введите сгенерированный файл * .pb.go - PullRequest
0 голосов
/ 05 июня 2018

Я работаю над учебником о 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 типа?Разве структура не должна отражать то, что я определяю в моем 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:"-"`
}

1 Ответ

0 голосов
/ 08 июня 2018

Типы XXX_ используются библиотекой Protobuf для хранения неизвестных полей.Когда вы декодируете прото, в сериализованных данных могут быть дополнительные поля, с которыми библиотека не знает, что делать.Это может произойти, например, когда читатель и записывающий данные используют разные копии файла прото.Это функция, помогающая обеспечить обратную совместимость между клиентами и обслуживаемую в разное время.

Кроме того, поля XXX позволяют отображать extensions , которые были частью Proto2.Они были удалены в Proto3 в пользу Any , но библиотека все еще нуждается в их поддержке.

Что делать с этим?Я бы просто оставил их в покое и не ссылался на них.Вам не нужно устанавливать их, и вам не нужно их читать.Библиотека Go Protobuf будет обрабатывать их для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...