Perché la porta è una stringa e non un numero intero?


103

Il Portmetodo restituisce una stringa e non un numero intero. Qual è la ragione di ciò ed è sicuro anteporre alla porta ":"?

Risposte:


143

Questo perché ciò che appare dopo i due punti può essere un numero di porta o un nome di servizio.

Quello che segue è un esempio valido in cui viene utilizzato il nome del servizio anziché un numero di porta:

listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...

La mappatura delle porte per un particolare servizio può essere ricercata utilizzando net.LookupPort. Sui sistemi Unix, il /etc/servicesfile viene originato per le mappature.


1
Sono sempre incuriosito dalla dicotomia tipo aperto / tipo chiuso. Mi piacerebbe vedere qualcosa come un tipo misto in cui ci sono alcuni valori predefiniti (qui ad esempio porte e servizi ben noti) ma consente anche di estenderli, in definitiva per supportare il completamento automatico. Nella mia limitata conoscenza lavorativa gli ADT TypeScripts si avvicinano di più, forse gli ADT Swifts possono esprimere anche questo direttamente.
Stefan Hanke

0

Per un numero il valore predefinito è 0: se una funzione

 func (u * URL) Port () string

il numero di ritorno invece di sting la porta sarà 0

La porta 0 è una porta riservata nella rete TCP / IP, il che significa che non dovrebbe essere utilizzata nei messaggi TCP o UDP. Tuttavia, la porta 0 ha un significato speciale nella programmazione di rete, in particolare nella programmazione dei socket Unix: per la richiesta di porte dinamiche allocate dal sistema.

è una necessità di programmazione in parecchie funzioni


In libGURL, url.port()restituisce una stringa ... ma fornisce anche GURL url.has_port(). Quindi teoricamente potremmo distinguere http://example.com:/path(ha una porta, ma port()è una stringa vuota) da http://example.com/path(non ha una porta). Ovviamente GURL stesso non lo fa! Segnala persino che http://example.com:80/path"non ha una porta", sulla base del fatto che la porta specificata esplicitamente è ridondante con lo schema. Il che è pazzesco , ma non importa ... Il punto è, Stringnon lo è Optional. Non confonderli.
Quuxplusone
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.