La Port
méthode renvoie une chaîne et non un entier. Quelle est la raison de cela et est-il sûr de préfixer le port avec ":"?
103
En effet, ce qui apparaît après les deux points peut être un numéro de port ou un nom de service.
Voici un exemple valide où le nom du service est utilisé à la place d'un numéro de port:
listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...
Le mappage de port pour un service particulier peut être recherché à l'aide de net.LookupPort
. Sur les systèmes Unix, le /etc/services
fichier provient des mappages.
Pour un nombre, la valeur par défaut est 0: si une fonction
numéro de retour au lieu de piquer le port sera 0
Le port 0 est un port réservé dans les réseaux TCP / IP, ce qui signifie qu'il ne doit pas être utilisé dans les messages TCP ou UDP. Cependant, le port 0 a une signification particulière dans la programmation de réseau, en particulier la programmation de socket Unix: pour demander des ports dynamiques alloués par le système.
c'est un besoin de programmation dans plusieurs fonctions
la source
url.port()
renvoie une chaîne ... mais GURL fournit égalementurl.has_port()
. Donc, théoriquement, nous pourrions distinguerhttp://example.com:/path
(a un port, maisport()
est une chaîne vide) dehttp://example.com/path
(n'a pas de port). Bien sûr, GURL ne fait pas cela! Il signale même quehttp://example.com:80/path
"n'a pas de port", au motif que le port explicitement spécifié est redondant avec le schéma. Ce qui est fou , mais tant pis ... Le faitString
est que nonOptional
. Ne les confondez pas.