Почему порт является строкой, а не целым числом?

103

PortМетод возвращает строку , а не целое число. В чем причина этого и безопасно ли ставить перед портом префикс ":"?

R3turnz
источник

Ответы:

143

Это связано с тем, что то, что появляется после двоеточия, может быть либо номером порта, либо именем службы.

Ниже приведен допустимый пример, в котором имя службы используется вместо номера порта:

listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...

Сопоставление портов для конкретной службы можно найти с помощью net.LookupPort. В системах Unix /etc/servicesисточник файла для сопоставлений.

Тим Купер
источник
1
Меня всегда заинтриговала дихотомия открытого и закрытого типов. Я хотел бы видеть что-то вроде смешанного типа, где есть некоторые значения по умолчанию (здесь, например, хорошо известные порты и службы), но также позволяет их расширять, в конечном итоге для поддержки автозаполнения. В моих ограниченных практических знаниях ADT TypeScripts подходят ближе всего, возможно, ADT Swifts могут выразить это также напрямую.
Стефан Ханке
0

Для числа значение по умолчанию - 0: если функция

 func (u * URL) Port () string

номер возврата вместо sting порт будет 0

Порт 0 - это зарезервированный порт в сети TCP / IP, что означает, что он не должен использоваться в сообщениях TCP или UDP. Однако порт 0 имеет особое значение в сетевом программировании, особенно в программировании сокетов Unix: для запроса динамических портов, выделенных системой.

это необходимость программирования в нескольких функциях

Фадид
источник
В libGURL url.port()возвращает строку ... но GURL также предоставляет url.has_port(). Итак, теоретически мы могли бы отличить http://example.com:/path(есть порт, но port()пустая строка) от http://example.com/path(нет порта). Конечно, сам GURL этого не делает! Он даже сообщает, что http://example.com:80/path«не имеет порта» на том основании, что явно указанный порт является избыточным для схемы. Что безумие , но Stringничего ... Дело в том, что это не так Optional. Не смешивайте их.
Quuxplusone