Antworten:
Dies liegt daran, dass nach dem Doppelpunkt entweder eine Portnummer oder ein Dienstname angezeigt werden kann.
Das folgende Beispiel ist gültig, wenn der Dienstname anstelle einer Portnummer verwendet wird:
listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...
Die Portzuordnung für einen bestimmten Dienst kann mithilfe von nachgeschlagen werden net.LookupPort
. Auf Unix-Systemen wird die /etc/services
Datei für die Zuordnungen bezogen.
Für eine Zahl ist der Standardwert 0: wenn eine Funktion
func (u * URL) Port () string
Die Rückgabe-Nummer anstelle des Stichs lautet 0
Port 0 ist ein reservierter Port in TCP / IP-Netzwerken. Dies bedeutet, dass er nicht in TCP- oder UDP-Nachrichten verwendet werden sollte. Port 0 hat jedoch eine besondere Bedeutung bei der Netzwerkprogrammierung, insbesondere bei der Unix-Socket-Programmierung: zum Anfordern von vom System zugewiesenen dynamischen Ports.
Es ist notwendig, in mehreren Funktionen zu programmieren
url.port()
einen String zurück ... aber GURL bietet auch url.has_port()
. Theoretisch könnten wir also unterscheiden http://example.com:/path
(hat einen Port, ist aber port()
eine leere Zeichenfolge) von http://example.com/path
(hat keinen Port). Natürlich macht GURL das nicht! Es wird sogar berichtet, dass http://example.com:80/path
"kein Port vorhanden ist", da der explizit angegebene Port für das Schema redundant ist. Was verrückt ist , aber egal ... Punkt ist, String
ist nicht Optional
. Kombiniere sie nicht.