Как лучше использовать поле IP (IPV4 или IPV6) в файле proto3 для использования Golang и C #

Я хочу использовать поле IP в сообщении proto3. Какой тип в proto3 я должен использовать для его представления. Поле будет использоваться реализациями Golang и C #. Должен ли я использовать строку? или fixed32 для IPV4 и байтов для IPV6?

message xyz {
  string ip_addr = 1;
}

or

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

Если это второй, то как его закодировать в реализации Golang? Например, я должен сначала создать строку с действующим IP-адресом, а затем преобразовать ее в формат fixed32 или как это?


person Avinash K R    schedule 20.08.2019    source источник


Ответы (1)


Если у вас здесь нет ограничений производительности, я бы просто использовал строку.

Практически любой язык поддерживает чтение IP-адреса из строки со стандартной нотацией ipv4 или ipv6. Если вы используете двоичное представление в поле fixed32 или bytes, вам нужно будет найти способ преобразовать его на каждом языке, с которым вы используете свой протокол.

Вы также можете указать, всегда ли это должен быть IP-адрес или вместо него можно использовать имя хоста DNS.

person jpa    schedule 20.08.2019