当我们使用http.ListenAndServe
时,有什么区别:
http.ListenAndServe("0.0.0.0:80", nil)
和
http.ListenAndServe(":80", nil)
?两个版本都不会侦听端口80
上的所有接口吗?
答案 0 :(得分:6)
http.ListenAndServe()
函数最终调用net.Listen()
。 net.Listen
的文档声明它将绑定到提供给它的网络:
对于TCP网络,如果address参数中的主机为空或文本未指定的IP地址,则Listen会侦听本地系统的所有可用单播和任播IP地址。要仅使用IPv4,请使用网络“tcp4”。
但是,查看http.ListenAndServe()
的来源,我们可以看到它将"tcp"
指定为网络,而不是"tcp4"
。因此,示例代码中的调用应该导致相同的行为,即两个调用都应该绑定到所有可用的接口。但是,进一步深入golang源代码我们最终在internetAddrList()
中,我们可以看到它区分了一个空的host
值和一个指定了ipv4地址的值。因此golang确实将指定的ipv4地址视为仅在该接口上绑定的指示。