如何在Go的时间库中使用Protobuf的时间戳库

时间:2018-08-30 02:05:58

标签: go protocol-buffers

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内有一些评论示例,但我不太理解。

要将其与go的time library结合使用。我不确定如何在Timestamp内设置字段。我假设这两种类型之间的“转换”并不困难,但是我对Go和protobuf不熟悉。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您必须手动将其转换为time.Time。

对于非指针值:

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

对于指针值:

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