포트가 정수가 아닌 문자열 인 이유는 무엇입니까?


103

Port메서드는 정수가 아닌 문자열을 반환합니다. 그 이유는 무엇이며 포트 앞에 ":"을 붙여도 안전합니까?

답변:


143

콜론 뒤에 나타나는 것은 포트 번호 나 서비스 이름이 될 수 있기 때문입니다.

다음은 포트 번호 대신 서비스 이름이 사용되는 유효한 예입니다.

listener, err := net.Listen("tcp", "localhost:https") // port 443
// ...

특정 서비스에 대한 포트 매핑은를 사용하여 조회 할 수 있습니다 net.LookupPort. Unix 시스템에서 /etc/services파일은 매핑을위한 소스입니다.


1
나는 항상 개방형 / 폐쇄 형 이분법에 흥미를 느낍니다. 일부 기본값 (예 : 잘 알려진 포트 및 서비스)이 있지만이를 확장하여 궁극적으로 자동 완성을 지원 하는 혼합 유형 과 같은 것을보고 싶습니다 . 내 제한된 실무 지식에서 TypeScripts ADT가 가장 가깝습니다. Swifts ADT가 이것을 직접 표현할 수도 있습니다.
Stefan Hanke

0

숫자의 경우 기본값은 0입니다.

 func (u * URL) Port () string

포트를 찌르는 대신 반환 번호는 0입니다.

포트 0은 TCP / IP 네트워킹에서 예약 된 포트이므로 TCP 또는 UDP 메시지에 사용해서는 안됩니다. 그러나 포트 0은 네트워크 프로그래밍, 특히 Unix 소켓 프로그래밍에서 특별한 의미를 지닙니다 : 시스템 할당 동적 포트를 요청합니다.

여러 기능으로 프로그래밍 할 필요가 있습니다.


libGURL에서 url.port()문자열을 반환하지만 GURL은 url.has_port(). 따라서 이론적으로 http://example.com:/path(포트가 있지만 port()빈 문자열 임)을 http://example.com/path(포트가 없음 ) 과 구별 할 수 있습니다. 물론 GURL 자체는 이것을하지 않습니다! http://example.com:80/path명시 적으로 지정된 포트가 스키마와 중복된다는 이유로 "포트가 없습니다"라고 보고하기도합니다 . 어느 미친 ,하지만 결코 마음 ... 포인트가, String아니다 Optional. 그것들을 합치 지 마십시오.
Quuxplusone
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.