第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 grpcurl 發(fā)送時間戳?

如何通過 grpcurl 發(fā)送時間戳?

Go
qq_笑_17 2022-06-06 15:25:25
我正在使用 GRPC/proto-buffers 在 GoLang 中編寫我的第一個 API 端點。我對 GoLang 比較陌生。以下是我為測試用例編寫的文件package my_packageimport (    "context"    "testing"    "github.com/stretchr/testify/require"    "google.golang.org/protobuf/types/known/structpb"    "github.com/MyTeam/myproject/cmd/eventstream/setup"    v1handler "github.com/MyTeam/myproject/internal/handlers/myproject/v1"    v1interface "github.com/MyTeam/myproject/proto/.gen/go/myteam/myproject/v1")func TestEndpoint(t *testing.T) {    conf := &setup.Config{}    // Initialize our API handlers    myhandler := v1handler.New(&v1handler.Config{})    t.Run("Success", func(t *testing.T) {        res, err := myhandler.Endpoint(context.Background(), &v1interface.EndpointRequest{            A: "S",            B: &structpb.Struct{                Fields: map[string]*structpb.Value{                    "T": &structpb.Value{                        Kind: &structpb.Value_StringValue{                            StringValue: "U",                        },                    },                    "V": &structpb.Value{                        Kind: &structpb.Value_StringValue{                            StringValue: "W",                        },                    },                },            },            C: &timestamppb.Timestamp{Seconds: 1590179525, Nanos: 0},        })        require.Nil(t, err)        // Assert we got what we want.        require.Equal(t, "Ok", res.Text)    })}上面的測試用例似乎工作正常。但我想用 grpcurl 模擬同樣的測試用例。這有效:grpcurl -d '{"a": "S", "b": {"T": "U", "V": "W"}}' -plaintext localhost:11000 myteam.myproject.v1.MyProject/Endpoint但是當我嘗試以下操作時,它失敗了:grpcurl -d '{"a": "S", "b": {"T": "U", "V": "W"}, "c": "1590179525"}' -plaintext localhost:11000 myteam.myproject.v1.MyProject/EndpointError invoking method "myteam.myproject.v1.MyProject/Endpoint": error getting request data: bad Timestamp: parsing time "1590179525" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse "179525" as "-"如何通過 grpcurl 發(fā)送時間戳?
查看完整描述

1 回答

?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

google.protobuf.Timestamp的底層類型是timestamppb.Timestamp。

文檔說明了 json 表示的格式:

JSON 映射

在 JSON 格式中,Timestamp 類型被編碼為RFC 3339格式的字符串。也就是說,格式為“{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z”,其中 {year} 始終使用四位數(shù)字表示,而 { month}、{day}、{hour}、{min} 和 {sec} 分別用零填充到兩位數(shù)。小數(shù)秒,最多可達 9 位(即分辨率高達 1 納秒),是可選的?!癦”后綴表示時區(qū)(“UTC”);時區(qū)是必需的。proto3 JSON 序列化程序在打印 Timestamp 類型時應始終使用 UTC(如“Z”所示),并且 proto3 JSON 解析器應該能夠同時接受 UTC 和其他時區(qū)(如偏移量所示)。

例如,“2017-01-15T01:30:15.01Z”對 2017 年 1 月 15 日 01:30 UTC 過去 15.01 秒進行編碼。

這也可以在您收到的錯誤消息中看到:

將“1590179525”解析為“2006-01-02T15:04:05.999999999Z07:00”:無法將“179525”解析為“-”

這是 Go 的標準時間解析,如Time.Parse中所述。

因此,您應該傳遞字符串,而不是傳遞自紀元以來的秒數(shù)字符串:

2020-05-22T20:32:05Z

上面的字符串是通過運行獲得的:

fmt.Println(time.Unix(1590179525, 0).Format(time.RFC3339))


查看完整回答
反對 回復 2022-06-06
  • 1 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號