O Port
método retorna uma string e não um inteiro. Qual é a razão para isso e é seguro prefixar a porta com ":"?
103
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
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
fonte
url.port()
retorna uma string ... mas GURL também forneceurl.has_port()
. Então, teoricamente, poderíamos distinguirhttp://example.com:/path
(tem uma porta, masport()
é uma string vazia) dehttp://example.com/path
(não tem uma porta). Claro que o próprio GURL não faz isso! Ele ainda informa quehttp://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.