Die Port
Methode gibt eine Zeichenfolge und keine Ganzzahl zurück. Was ist der Grund dafür und ist es sicher, dem Port ":" voranzustellen?
103
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
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
quelle
url.port()
einen String zurück ... aber GURL bietet auchurl.has_port()
. Theoretisch könnten wir also unterscheidenhttp://example.com:/path
(hat einen Port, ist aberport()
eine leere Zeichenfolge) vonhttp://example.com/path
(hat keinen Port). Natürlich macht GURL das nicht! Es wird sogar berichtet, dasshttp://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 nichtOptional
. Kombiniere sie nicht.