go - 在 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 格式还是如何?
解决方案
如果您在这里没有性能限制,我会选择一个字符串。
几乎所有语言都支持从具有标准 ipv4 或 ipv6 表示法的字符串中读取 IP 地址。如果您在 fixed32 或 bytes 字段中使用二进制表示,您必须想办法在您使用协议的每种语言中转换它。
您可能还想指定它是否总是必须是一个 IP 地址,或者是否可以使用 DNS 主机名。
推荐阅读
- google-apps-script - Google Docs 脚本:通过 Marketplace 在我的帐户中共享脚本/未经审查的脚本(替换以前的 chrome 插件商店)
- r-markdown - 新的 Pandoc distrib = 松散的交叉引用 (RMarkdown - knitr - Bookdown - thesisdown - R)
- javascript - NestJS 环境变量未定义
- php - mod_rewrite 复制 html 元素因此破坏了页面
- vim - Vim 选择光标下的整个带符号的数字(“iw”代表数字)
- reactjs - React HoC - 道具不会传递给包装的组件
- xamarin - Xamarin 表单触摸操作 HitTest 总是返回 fasle
- ruby-on-rails - 如何在 RTL YAML 文件中为 Ruby on Rails 传递变量
- php - PHP - 只允许购物车中的一个产品类别?
- pandas - Groupby依靠熊猫中的唯一日期时间