El Port
método devuelve una cadena y no un número entero. ¿Cuál es la razón de esto? ¿Es seguro prefijar el puerto con ":"?
103
Esto se debe a que lo que aparece después de los dos puntos puede ser un número de puerto o un nombre de servicio.
El siguiente es un ejemplo válido donde se usa el nombre del servicio en lugar de un número de puerto:
listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...
El mapeo de puertos para un servicio en particular se puede buscar usando net.LookupPort
. En los sistemas Unix, el /etc/services
archivo se obtiene para las asignaciones.
Para un número, el valor predeterminado es 0: si una función
devolver número en lugar de picar el puerto será 0
El puerto 0 es un puerto reservado en las redes TCP / IP, lo que significa que no debe usarse en mensajes TCP o UDP. Sin embargo, el puerto 0 tiene un significado especial en la programación de redes, particularmente en la programación de sockets Unix: para solicitar puertos dinámicos asignados por el sistema.
es una necesidad de programar en varias funciones
fuente
url.port()
devuelve una cadena ... pero GURL también proporcionaurl.has_port()
. Entonces, teóricamente, podríamos distinguirhttp://example.com:/path
(tiene un puerto, peroport()
es una cadena vacía) dehttp://example.com/path
(no tiene un puerto). ¡Por supuesto que GURL no hace esto! Incluso informa quehttp://example.com:80/path
"no tiene un puerto", con el argumento de que el puerto especificado explícitamente es redundante con el esquema. Lo cual es una locura , pero no importa ... El punto es,String
no esOptional
. No los mezcle.