为什么port是字符串而不是整数?


103

Port方法返回一个字符串而不是整数。原因是什么?在端口前面加上“:”是否安全?

Answers:


143

这是因为冒号后面出现的可能是端口号或服务名称。

以下是使用服务名称代替端口号的有效示例:

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

可以使用来查找特定服务的端口映射net.LookupPort。在Unix系统上,该/etc/services文件来自于映射。


1
我总是对开放式/封闭式二分法感兴趣。我希望看到类似混合类型的内容,其中有一些默认值(例如,众所周知的端口和服务),但也允许扩展它们,最终支持自动完成。在我有限的工作知识中,TypeScript ADT最接近,也许Swifts ADT也可以直接表达这一点。
Stefan Hanke's

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.