我想在proto3消息中使用IP字段。我应该使用proto3中的哪种类型来表示相同的类型。该字段将由Golang和C#实现使用。我应该使用字符串吗?或对于IPV4是fixed32,对于IPV6是字节?

message xyz {
  string ip_addr = 1;
}

或者
message xyz {
    oneof ip_addr{
       fixed32 v4 = 1;
       bytes v6 = 2;
}

如果是第二个,那么如何在Golang实现中对其进行编码?就像,我应该先用有效的IP地址构造一个字符串,然后将其转换为fixed32格式吗?

最佳答案

如果您在这里没有性能限制,那么我只需要输入一个字符串即可。

几乎所有语言都支持使用标准ipv4或ipv6表示法从字符串中读取ip地址。如果在fixed32或bytes字段中使用二进制表示形式,则必须找出一种方法来将其转换为使用协议(protocol)的每种语言。

您可能还需要指定它是否始终必须是一个IP地址,或者是否可以使用DNS主机名代替。

08-03 12:53