Как преобразовать строку в google.protobuf.Временная метка?

#go #protocol-buffers

#Вперед #протокол-буферы

Вопрос:

У меня есть строка Go x := "2020-09-01T21:46:43Z"

Вот мой Protobuf3:

 message MyMessage {
  google.protobuf.Timestamp mytimestamp = 1;
}
  

Как я могу преобразовать эту строку x в a google.protobuf.Timestamp ?

Комментарии:

1. Язык называется Go .

Ответ №1:

Используйте пакет ptypes, в котором есть помощники для преобразования в / из типов protobuf.

Вам помогут две функции:


ptypes .Временная метка: преобразует a Timestamp в a time.Time :

 func Timestamp(ts *timestamppb.Timestamp) (time.Time, error)
  

Вызовите функцию timestamppb.New . Это преобразует a time.Time в a Timestamp :

 func timestamppb.New(t time.Time) *timestamppb.Timestamp
  

Обратите внимание, что оба имеют дело со временем.Время, тип времени в стандартной библиотеке. Сначала вам нужно будет разобрать вашу строку на time.Time время использования.Разбор.


Собрав все это вместе, мы имеем:

 package main

import (
    "fmt"
    "time"
    "google.golang.org/protobuf/types/known/timestamppb"
)

func main() {

    t, err := time.Parse(time.RFC3339, "2020-09-01T21:46:43Z")
    if err != nil {
        panic(err)
    }
    
    pb := timestamppb.New(t)

    fmt.Println(pb)
}