Neden port bir tamsayı değil de bir dizedir?


103

PortYöntem bir dize değil, bir tamsayı döndürür. Bunun nedeni nedir ve bağlantı noktasının önüne ":" koymak güvenli midir?

Yanıtlar:


143

Bunun nedeni, iki noktadan sonra görünen şeyin bir bağlantı noktası numarası veya hizmet adı olabilmesidir.

Aşağıda, bir bağlantı noktası numarası yerine hizmet adının kullanıldığı geçerli bir örnek verilmiştir:

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

Belirli bir hizmet için bağlantı noktası eşlemesi kullanılarak aranabilir net.LookupPort. Unix sistemlerinde, /etc/servicesdosya eşlemeler için kaynaklanır.


1
Her zaman açık tip / kapalı tip ikilemi ilgimi çeker. Bazı varsayılanların (burada örneğin iyi bilinen bağlantı noktaları ve hizmetler) olduğu, ancak sonuçta otomatik tamamlamayı desteklemek için bunların genişletilmesine de izin veren karma bir tür gibi bir şey görmek istiyorum . Benim sınırlı çalışma bilgime göre TypeScripts ADT'leri en yakın olanıdır, belki Swifts ADT'leri bunu doğrudan da ifade edebilir.
Stefan Hanke

0

Bir sayı için varsayılan değer 0'dır: eğer bir işlev

 func (u * URL) Port () string

bağlantı noktası sokmak yerine dönüş numarası 0 olacaktır

Port 0, TCP / IP ağında ayrılmış bir porttur, yani TCP veya UDP mesajlarında kullanılmamalıdır. Bununla birlikte, port 0, ağ programlamasında, özellikle de Unix soket programlamasında özel bir önem taşır: sistem tarafından tahsis edilmiş, dinamik portlar talep etmek için.

çeşitli işlevlerde programlama ihtiyacıdır


LibGURL'de url.port()bir dize döndürür ... ancak GURL ayrıca sağlar url.has_port(). Yani teorik olarak http://example.com:/path(bir portu vardır, ancak port()boş dizgedir) ile http://example.com/path(portu yoktur ) arasında ayrım yapabiliriz . Elbette GURL bunu yapmaz! Hatta http://example.com:80/pathaçıkça belirtilen bağlantı noktasının şema ile gereksiz olduğu gerekçesiyle "bir bağlantı noktasına sahip olmadığını" bildirir . Bu çılgınca , ama boş ver ... Önemli olan, Stringdeğil Optional. Onları karıştırmayın.
Quuxplusone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.