首页 > 解决方案 > 在 proto3 文件中使用 IP 字段(IPV4 或 IPV6)以供 Golang 和 C# 使用的更好方法是什么

问题描述

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

message xyz {
  string ip_addr = 1;
}

或者

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

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

标签: goprotocol-buffersipv6ipv4proto

解决方案


如果您在这里没有性能限制,我会选择一个字符串。

几乎所有语言都支持从具有标准 ipv4 或 ipv6 表示法的字符串中读取 IP 地址。如果您在 fixed32 或 bytes 字段中使用二进制表示,您必须想办法在您使用协议的每种语言中转换它。

您可能还想指定它是否总是必须是一个 IP 地址,或者是否可以使用 DNS 主机名。


推荐阅读