Ответы:
Это связано с тем, что то, что появляется после двоеточия, может быть либо номером порта, либо именем службы.
Ниже приведен допустимый пример, в котором имя службы используется вместо номера порта:
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
. Не смешивайте их.