ポートが整数ではなく文字列であるのはなぜですか?


103

このPortメソッドは、整数ではなく文字列を返します。その理由は何ですか?ポートの前に「:」を付けても安全ですか?

回答:


143

これは、コロンの後に表示されるものがポート番号またはサービス名のいずれかになる可能性があるためです。

以下は、ポート番号の代わりにサービス名が使用される有効な例です。

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

特定のサービスのポートマッピングは、を使用して検索できますnet.LookupPort。Unixシステムでは、/etc/servicesファイルはマッピング用に提供されます。


1
私はいつもオープン型とクローズ型の二分法に興味をそそられます。いくつかのデフォルト(ここでは、よく知られたポートとサービスなど)があり、最終的にはオートコンプリートをサポートするためにそれらを拡張することもできる、混合型のようなものを見たいです。私の限られた実用知識では、TypeScripts ADTが最も近くなります。SwiftADTはこれを直接表現することもできます。
ステファンハンケ2017

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 '10 / 10/19
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.