我已经有一个正在侦听端口80的web服务器(用node.js编写)。当我运行另一个也侦听端口80的Web服务器(用Go编写)时,Go webserver不会引发错误。
怎么会发生这种情况。
我的操作系统是Windows并且版本为go1.2.2。
答案 0 :(得分:6)
我在工作中遇到这种情况。 golang服务器将监听IPv6端口80,而另一个应用程序只监听IPv4。
对我来说,Golang应用程序首先运行。它停止听v4,然后在其他应用关闭后恢复。
[稍后编辑] 为了说明这一点,我刚刚运行了在此MSDN页面上找到的WinSock绑定/侦听C ++代码,端口已更改为80,然后我使用了此Go代码:
package main
import (
"log"
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("c:\\temp")))
log.Fatal(http.ListenAndServe(":80", nil))
}
此设置有效,因为C ++正在收听127.0.0.1
并且继续0.0.0.0
将go代码更改为log.Fatal(http.ListenAndServe("127.0.0.1:80", nil))
会导致建议使用nemo错误消息。
然后我启动了我的主要生产代码,它有一个Mongoose HTTP实例,它正在监听0.0.0.0:80
,然后运行上面的Go代码(删除127.0.0.1),两者都在监听{{1} },这可以通过Process Explorer看到。
答案 1 :(得分:0)
去报告错误就好了。您可能错过了检查返回的错误值。
package main
import (
"net/http"
"log"
)
func main() {
log.Fatal(http.ListenAndServe(":8080", nil))
}
$ nc -l 8080
$ go run test.go
2014/06/30 08:40:49 listen tcp :8080: bind: address already in use
exit status 1
答案 2 :(得分:-2)
您无法在同一端口上运行两个应用程序,还需要检查调用函数时返回的错误:
if err := http.ListenAndServe(":80", nil); err != nil {
panic(err)
}