首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang cloudEvent和proto之间的时间数据类型不匹配

Golang cloudEvent和proto之间的时间数据类型不匹配
EN

Stack Overflow用户
提问于 2021-08-14 16:00:25
回答 2查看 80关注 0票数 0

我正在创建一个原型文件(遵循cloudEvents标准)。

代码语言:javascript
复制
syntax = "proto3";
option go_package = "/events";

import "google/protobuf/timestamp.proto";
import "google/protobuf/any.proto";

message Event {
    string specversion = 2;
    string type = 3;
    string source = 4;
    string id = 5;
    google.protobuf.Timestamp time = 6;
    google.protobuf.Any data = 7;
    map<string, CloudEventAttributeValue> attributes = 8;
    string datacontenttype = 9;
    string test = 10;
}

它在客户端和服务器之间工作得很好。我们还希望确保这个对象完全符合cloudevents。为了测试这一点,如果我尝试使用json.marshal()编组这个对象,然后使用json.unmarshal将其解组为一个cloudEvent对象。在此测试中,由于proto object和cloudEvents之间的时间字段数据类型不匹配,反序列化正在中断。

代码语言:javascript
复制
bytes, _ := json.Marshal(ev)
fmt.Println(string(bytes))

e := cloudevents.NewEvent()
json.Unmarshal(bytes, &e)

但是如果我去掉时间字段,一切都会正常工作。知道我错过了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2021-08-15 17:00:19

时间真的应该是编程中第三难的事情(link)。

我不太熟悉Cloud Events,但我怀疑没有要求您能够使用默认编组。似乎您会对管理此映射的明确方式感到满意?

请在您的问题中包含生成的JSON。差异是什么?你有没有得到RFC3339格式的字符串表示,并且你想要,例如UNIX时代?

您可能需要一个自定义编组程序来将proto时间戳转换为UNIX纪元int,例如,对于Cloud事件。

票数 1
EN

Stack Overflow用户

发布于 2021-08-16 03:32:34

用protojson.Marshal代替json.Marshal解决了这个问题。在内部,它传递从proto标准进行编组所需的编组选项。

https://github.com/golang/protobuf/issues/1355

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68784948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档