Port
Metoda zwraca ciąg znaków, a nie całkowitą. Jaki jest tego powód i czy można bezpiecznie przedrostek portu „:”?
103
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
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
źródło
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, aleport()
jest pustym łańcuchem) odhttp://example.com/path
(nie ma portu). Oczywiście sam GURL tego nie robi! Zgłasza nawet, żehttp://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 oString
toOptional
. Nie łącz ich.