google.protobuf.StringValue有什么意义?

时间:2018-08-06 12:40:00

标签: protocol-buffers

我最近在Google的+--------+-------------------+---------+------------+-------+----------+-------------------+ | ResId| vrsn_strt_dts|instnc_nm|ship_strm_nb|vyge_id|onhand_cnt| vrsn_end_dts| +--------+-------------------+---------+------------+-------+----------+-------------------+ |27608171|2018-07-17 04:00:00| Standard| 11B| 1000| 10| null| |27608171|2018-09-17 04:00:00| Standard| 11B| 1000| 40|2018-07-17 04:00:00| |27608171|2018-09-18 04:00:00| Standard| 11B| 1000| 10|2018-09-17 04:00:00| |27608171|2018-09-19 04:00:00| Standard| 11B| 1000| 10|2018-09-18 04:00:00| |27608174|2018-08-17 04:00:00| Standard| 11C| 2000| 20| null| |27608174|2018-09-17 04:00:00| Standard| 11D| 5000| 50|2018-08-17 04:00:00| |27608173|2018-09-17 04:00:00| Standard| 11D| 3000| 30| null| 软件包中遇到了各种包装。我正在努力想象用例。任何人都可以阐明:这些问题打算解决什么问题?

这里是文档链接之一:https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/string-value(它什么也没说)。

此行为与简单的WebElement selectedByDefault= driver.findElement(By.xpath("//select[@id='F_21__3']")); Select select = new Select(selectedByDefault); if(select.getFirstSelectedOption().equals("Service")) { System.out.println("Services is displayed by Default."); } 类型之间的行为将有所不同的一件事是,此字段的写入效率较低(几个额外的字节,外加冗余的内存分配)。对于其他包装器而言,情况更糟,因为这些字段的protobuf变体的编写效率很低(Google的Protobuf序列化器不支持非数字类型的string编码)。

似乎都不是所希望的。那么,这是怎么回事?

2 个答案:

答案 0 :(得分:0)

有几个原因,主要与使用它们的地方有关-请参见struct.proto

StringValue可以为null,string通常不能使用与原型泡沫接口的语言。例如在Go中始终设置字符串;字符串的“零值”是空字符串“”,因此无法区分“该值被有意设置为空字符串”和“不存在任何值”。 StringValue可以为null,因此可以解决此问题。在StructValue中使用它们可能表示任意JSON时,这一点尤其重要:为此,需要区分设置为空字符串(StringValue和空字符串)的JSON密钥或根本没有设置的JSON密钥(空StringValue)。

此外,如果您查看struct.proto,您会发现这些不是原型中完全成熟的消息类型-它们都是由message Value生成的,其中oneof kind { number_value, string_value, bool_value...等通过使用oneof struct.proto可以在一个字段中表示各种不同的值。再次考虑到struct.proto设计用于处理的内容-任意JSON-您不知道给定JSON密钥提前具有哪种类型的值。

答案 1 :(得分:0)

除了乔治的回答,您不能使用Protobuf原语作为gRPC过程的参数或返回值。