Pourquoi le port est-il une chaîne et non un entier?

103

La Portmé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 ":"?

R3turnz
la source

Réponses:

143

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/servicesfichier provient des mappages.

Tim Cooper
la source
1
Je suis toujours intrigué par la dichotomie type ouvert / type fermé. Je voudrais voir quelque chose comme un type mixte où il y a des valeurs par défaut (ici, par exemple, des ports et des services bien connus) mais permet également de les étendre, finalement pour prendre en charge l'autocomplétion. Dans mes connaissances de travail limitées, les ADT TypeScripts sont les plus proches, peut-être que les ADT Swifts peuvent l'exprimer aussi directement.
Stefan Hanke
0

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

Fadid
la source
Dans libGURL, 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 Stringest que non Optional. Ne les confondez pas.
Quuxplusone