Respostas:
Isso ocorre porque o que aparece após os dois pontos pode ser um número de porta ou nome de serviço.
A seguir está um exemplo válido em que o nome do serviço é usado em vez de um número de porta:
listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...
O mapeamento de porta para um serviço específico pode ser pesquisado usando net.LookupPort
. Em sistemas Unix, o /etc/services
arquivo é originado dos mapeamentos.
Para um número, o valor padrão é 0: se uma função
func (u * URL) Port () string
número de retorno em vez de sting a porta será 0
A porta 0 é uma porta reservada na rede TCP / IP, o que significa que não deve ser usada em mensagens TCP ou UDP. No entanto, a porta 0 tem um significado especial na programação de rede, particularmente na programação de soquete Unix: para solicitar portas dinâmicas alocadas pelo sistema.
é uma necessidade de programação em várias funções
url.port()
retorna uma string ... mas GURL também fornece url.has_port()
. Então, teoricamente, poderíamos distinguir http://example.com:/path
(tem uma porta, mas port()
é uma string vazia) de http://example.com/path
(não tem uma porta). Claro que o próprio GURL não faz isso! Ele ainda informa que http://example.com:80/path
"não tem uma porta", alegando que a porta explicitamente especificada é redundante com o esquema. O que é loucura , mas não importa ... A questão é, String
não é Optional
. Não os confunda.