Ответы:
Это связано с тем, что то, что появляется после двоеточия, может быть либо номером порта, либо именем службы.
Ниже приведен допустимый пример, в котором имя службы используется вместо номера порта:
listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...
Сопоставление портов для конкретной службы можно найти с помощью net.LookupPort. В системах Unix /etc/servicesисточник файла для сопоставлений.
Для числа значение по умолчанию - 0: если функция
func (u * URL) Port () string
номер возврата вместо sting порт будет 0
Порт 0 - это зарезервированный порт в сети TCP / IP, что означает, что он не должен использоваться в сообщениях TCP или UDP. Однако порт 0 имеет особое значение в сетевом программировании, особенно в программировании сокетов Unix: для запроса динамических портов, выделенных системой.
это необходимость программирования в нескольких функциях
url.port()возвращает строку ... но GURL также предоставляет url.has_port(). Итак, теоретически мы могли бы отличить http://example.com:/path(есть порт, но port()пустая строка) от http://example.com/path(нет порта). Конечно, сам GURL этого не делает! Он даже сообщает, что http://example.com:80/path«не имеет порта» на том основании, что явно указанный порт является избыточным для схемы. Что безумие , но Stringничего ... Дело в том, что это не так Optional. Не смешивайте их.