Odpowiedzi:
Dzieje się tak, ponieważ to, co pojawia się po dwukropku, może być numerem portu lub nazwą usługi.
Poniżej znajduje się prawidłowy przykład, w którym zamiast numeru portu używana jest nazwa usługi:
listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...
Mapowanie portów dla określonej usługi można sprawdzić za pomocą net.LookupPort
. W systemach uniksowych /etc/services
plik jest pobierany na potrzeby mapowań.
Dla liczby domyślną wartością jest 0: jeśli funkcja
func (u * URL) Port () string
zwracany numer zamiast żądać portu będzie wynosił 0
Port 0 jest zarezerwowanym portem w sieci TCP / IP, co oznacza, że nie powinien być używany w komunikatach TCP lub UDP. Jednak port 0 ma szczególne znaczenie w programowaniu sieciowym, zwłaszcza w programowaniu za pomocą gniazd Unix: do żądania przydzielonych przez system portów dynamicznych.
Konieczne jest zaprogramowanie kilku funkcji
url.port()
zwraca ciąg znaków ... ale GURL zapewnia również url.has_port()
. Więc teoretycznie moglibyśmy odróżnić http://example.com:/path
(ma port, ale port()
jest pustym łańcuchem) od http://example.com/path
(nie ma portu). Oczywiście sam GURL tego nie robi! Zgłasza nawet, że http://example.com:80/path
„nie ma portu”, ponieważ wyraźnie określony port jest nadmiarowy w schemacie. Co jest szalone , ale nieważne ... Nie chodzi o String
to Optional
. Nie łącz ich.