Réponses:
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
func (u * URL) Port () string
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
url.port()
renvoie une chaîne ... mais GURL fournit également url.has_port()
. Donc, théoriquement, nous pourrions distinguer http://example.com:/path
(a un port, mais port()
est une chaîne vide) de http://example.com/path
(n'a pas de port). Bien sûr, GURL ne fait pas cela! Il signale même que http://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 fait String
est que non Optional
. Ne les confondez pas.