Tại sao cổng là một chuỗi mà không phải là một số nguyên?


103

Các Portphương thức trả về một chuỗi và không phải là một số nguyên. Lý do cho điều đó là gì và có an toàn khi đặt tiền tố cổng bằng ":" không?

Câu trả lời:


143

Điều này là do những gì xuất hiện sau dấu hai chấm có thể là số cổng hoặc tên dịch vụ.

Sau đây là một ví dụ hợp lệ trong đó tên dịch vụ được sử dụng thay vì số cổng:

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

Ánh xạ cổng cho một dịch vụ cụ thể có thể được tra cứu bằng cách sử dụng net.LookupPort. Trên hệ thống Unix, /etc/servicestệp có nguồn gốc cho các ánh xạ.


1
Tôi luôn bị hấp dẫn bởi sự phân đôi kiểu mở / kiểu đóng. Tôi muốn xem một cái gì đó giống như một loại hỗn hợp có một số mặc định (ở đây, ví dụ: các cổng và dịch vụ nổi tiếng) nhưng cũng cho phép mở rộng chúng, cuối cùng là để hỗ trợ tự động hoàn thành. Trong kiến ​​thức làm việc hạn chế của tôi, các ADT TypeScripts đến gần nhất, có thể các ADT Swifts cũng có thể thể hiện trực tiếp điều này.
Stefan Hanke

0

Đối với một số, giá trị mặc định là 0: nếu một hàm

 func (u * URL) Port () string

trả về số thay vì sting cổng sẽ là 0

Cổng 0 là một cổng dành riêng trong mạng TCP / IP, có nghĩa là nó không nên được sử dụng trong các thông điệp TCP hoặc UDP. Tuy nhiên, cổng 0 có ý nghĩa đặc biệt trong lập trình mạng, đặc biệt là lập trình ổ cắm Unix: để yêu cầu các cổng động, do hệ thống cấp phát.

nó là một nhu cầu để lập trình trong một số chức năng


Trong libGURL, url.port()trả về một chuỗi ... nhưng GURL cũng cung cấp url.has_port(). Vì vậy, về mặt lý thuyết, chúng ta có thể phân biệt http://example.com:/path(có cổng, nhưng port()là chuỗi rỗng) với http://example.com/path(không có cổng). Tất nhiên bản thân GURL không làm điều này! Nó thậm chí còn báo cáo rằng http://example.com:80/path"không có cổng", với lý do rằng cổng được chỉ định rõ ràng là dư thừa với lược đồ. Điều đó thật điên rồ , nhưng đừng bận tâm ... Điểm là, Stringkhông phải Optional. Đừng nhầm lẫn chúng.
Quuxplusone
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.