Mengapa porta string dan bukan integer?

103

The Portmethod mengembalikan string dan bukan integer. Apa alasannya dan apakah aman untuk mengawali port dengan ":"?

R3turnz
sumber

Jawaban:

143

Ini karena apa yang muncul setelah titik dua bisa berupa nomor port atau nama layanan.

Berikut ini adalah contoh yang valid di mana nama layanan digunakan sebagai pengganti nomor port:

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

Pemetaan port untuk layanan tertentu dapat dicari dengan menggunakan net.LookupPort. Pada sistem Unix, /etc/servicesfile tersebut bersumber untuk pemetaan.

Tim Cooper
sumber
1
Saya selalu tertarik dengan dikotomi tipe terbuka / tipe tertutup. Saya ingin melihat sesuatu seperti tipe campuran di mana ada beberapa default (di sini misalnya port dan layanan terkenal) tetapi juga memungkinkan untuk memperluasnya, pada akhirnya untuk mendukung pelengkapan otomatis. Dalam pengetahuan kerja saya yang terbatas, TypeScripts, ADT paling mendekati, mungkin ADT Swifts dapat mengungkapkannya juga secara langsung.
Stefan Hanke
0

Untuk angka, nilai defaultnya adalah 0: jika sebuah fungsi

 func (u * URL) Port () string

nomor kembali bukannya sting port akan menjadi 0

Port 0 adalah port yang dicadangkan dalam jaringan TCP / IP, artinya port tersebut tidak boleh digunakan dalam pesan TCP atau UDP. Namun, port 0 membawa signifikansi khusus dalam pemrograman jaringan, terutama pemrograman soket Unix: untuk meminta port dinamis yang dialokasikan sistem.

itu adalah kebutuhan untuk pemrograman dalam beberapa fungsi

Fadid
sumber
Di libGURL, url.port()mengembalikan string ... tetapi GURL juga menyediakan url.has_port(). Jadi secara teoritis kita bisa membedakan http://example.com:/path(memiliki port, tetapi port()string kosong) dari http://example.com/path(tidak memiliki port). Tentu saja GURL sendiri tidak melakukan ini! Ia bahkan melaporkan bahwa http://example.com:80/path"tidak memiliki port," dengan alasan bahwa port yang ditentukan secara eksplisit berlebihan dengan skema. Yang gila , tapi sudahlah ... Intinya, Stringtidak Optional. Jangan menyamakannya.
Quuxplusone