Как использовать библиотеку меток времени Protobuf с библиотекой времени Go - PullRequest
0 голосов
/ 30 августа 2018

Импорт из github.com/golang/protobuf/ptypes/timestamp дает собственную реализацию метки времени Protobuf, которая может использоваться внутри ваших определений Protobuf для представления времени. При более внимательном рассмотрении предоставленный файл timestamp.pb.go выглядит так, как будто он сгенерировал примерно struct, например:

type Timestamp struct {
    Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"`
    Nanos                int32    `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"`
    XXX_NoUnkeyedLiteral struct{} `json:"-"`
    XXX_unrecognized     []byte   `json:"-"`
    XXX_sizecache        int32    `json:"-"`
}

Есть несколько прокомментированных примеров внутри timestamp.pb.go, но я не очень хорошо понимаю это.

Чтобы использовать его в связи с time библиотекой go . Я не уверен, как я должен установить поля внутри Timestamp. Я предполагаю, что «преобразование» между этими двумя типами не сложно, но я не знаком с Go и protobuf. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 августа 2018

Вы должны преобразовать это вручную во время. Время.

Для значений без указателя:

if !u.Timestamp.IsZero() {
    timestamp, _ := ptypes.TimestampProto(u.Timestamp)
    up.Timestamp = timestamp
}

Для значений указателя:

if u.Timestamp != nil {
    timestamp, _ := ptypes.TimestampProto(*u.Timestamp)
    up.Timestamp = timestamp
}
...