【问题标题】:Golang port blocking (?) using http.ListenAndServeGolang 端口阻塞 (?) 使用 http.ListenAndServe
【发布时间】:2015-03-26 19:05:55
【问题描述】:

我有一个简单的 golang 程序,它在执行名为 testFunc

的函数之前侦听端口上的活动
func main() {
    http.HandleFunc("/test", testFunc)
    http.ListenAndServe(":1337", nil)
}

当我构建这个程序时,运行它并转到http://localhost:1337/test,它工作正常。

当我终止程序并尝试再次运行它时,程序立即终止,显示没有错误输出。

例如,当我将端口更改为 1338 时,它第一次工作,然后每次都失败。有什么想法吗?

【问题讨论】:

  • 听起来像是防火墙问题...您可以尝试禁用防火墙/打开这些端口吗?
  • 检查来自http.ListenAndServe的错误
  • http.ListenAndServe 返回错误。打印错误以找出问题所在。
  • “显示没有错误输出”……不废话,你没有捕获并显示它! 从不忽略任何 Go 代码中的错误返回。
  • 顺便说一句,该错误可能是由于您的操作系统需要将端口的资源保留一段时间,直到旧的(可能不完全/错误关闭)连接完全过期。

标签: http go port


【解决方案1】:

该端口很可能正在使用中。捕获错误将为您提供更多详细信息。

if err := http.ListenAndServe(":1337", nil);err != nil {
        log.Fatal("ListenAndServe: ", err)
}

【讨论】:

  • 由于ListenAndServe(和Serve)通常不会返回,这通常被简化为log.Fatalln("ListenAndServe:", http.ListenAndServe(":1337", nil)),甚至只是log.Fatal(http.ListenAndServe(":1337", nil))。如果 Serve 会返回 nil 错误(它永远不会,但文档没有承诺),这将记录“”,但这通常是我们所希望的:服务器终止时的一些日志条目。
【解决方案2】:

好吧,原来这个错误是我的愚蠢错误。我今天已经从使用 PC 切换到 Mac 并且没有意识到 Ctrl+C 杀死了当前命令而不是 Ctrl+z 只是返回到 shell ...因此进程仍在运行并相互阻塞

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2016-10-24
    • 2017-08-02
    相关资源
    最近更新 更多