#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)
}