我最近在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
编码)。
似乎都不是所希望的。那么,这是怎么回事?
答案 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过程的参数或返回值。