【发布时间】:2021-07-05 07:24:36
【问题描述】:
我有一个结构如下的原始消息:
syntax = "proto3";
message Bar {
int64 id = 1;
string name = 2;
int64 value = 3;
}
message Msg {
int32 baz = 1;
oneof some_union {
string foo = 2;
Bar bar = 3;
}
}
我可以想到两种方法来编写等效于消息的 yaml。
在第一种方法中,请参见下面的示例,它分配 "some_union": null 并且在“foo”字段中没有设置任何值。
baz: 0
foo: "some_string"
在第二种方法中,见下面的例子,它会抛出一个错误,说cannot unmarshal object into Go struct field
baz: 0
some_union:
foo: "some_string"
我正在使用 github.com/ghodss/yaml 包将 yaml 解组为原始消息。
【问题讨论】:
-
您的
baz定义属于string类型,但您正在编组一个整数。 -
@colm.anseo 这只是一个问题,因为使用了
github.com/ghodss/yaml。 YAML 本身完全满足于将0解析为字符串并直接使用 go-yaml 将允许这样做。但是,包装器首先将输入转换为 json,其中0是始终一个整数,这会导致错误。 -
抱歉造成误会。我已经更新了这个问题。让
baz是一个整数。问题在于foo字段是 oneOf 类型并且不允许 yaml 进行结构转换。 -
您尚未共享
Foo和Bar消息定义。 -
我已更新问题以提及
foo和Bar的定义。但我认为这不会有太大帮助,问题是我无法为 oneOf 类型下的任何字段设置值。
标签: go yaml protocol-buffers