Respuestas:
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
func (u * URL) Port () string
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
url.port()
devuelve una cadena ... pero GURL también proporciona url.has_port()
. Entonces, teóricamente, podríamos distinguir http://example.com:/path
(tiene un puerto, pero port()
es una cadena vacía) de http://example.com/path
(no tiene un puerto). ¡Por supuesto que GURL no hace esto! Incluso informa que http://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 es Optional
. No los mezcle.