如何在go中关闭http端口?

分享于2023年02月01日 go http 问答
【问题标题】:How to close http port in go?如何在go中关闭http端口?
【发布时间】:2023-01-14 18:15:49
【问题描述】:

我只是在学习 Go,并创建简单的网络应用程序。但是每次我在 GO 中启动本地主机时(即使我在终端中停止了进程),它也不会关闭端口。那我怎么关闭它。

这是代码

const portNumber = ":8080"
func main() {
http.HandleFunc("/", Home)
http.HandleFunc("/about", About)

fmt.Println(fmt.Sprintf("Starting on port %s", portNumber))
_ = http.ListenAndServe(portNumber, nil)
}

我在网上做了研究,但找不到解决办法,所以希望你能帮助我。谢谢


【解决方案1】:

您可以使用包“net”手动关闭端口。您可以使用 net.Listener 结构的 Close() 方法关闭端口。以下是如何修改代码以关闭端口的示例:

const portNumber = ":8080"

功能主要(){

http.HandleFunc("/", Home)
http.HandleFunc("/about", About)

fmt.Println(fmt.Sprintf("Starting on port %s", portNumber))

listener, err := net.Listen("tcp", portNumber)
if err != nil {
    fmt.Println(err)
    return
}

defer listener.Close()

_ = http.Serve(listener, nil)

}

此代码使用 net.Listen() 函数在指定端口上打开监听器,如果成功,则将其分配给监听器变量。 defer 关键字用于确保在函数退出时(在本例中为程序终止时)调用 Close() 方法。

这是关闭端口并处理侦听端口时发生的错误的干净方法。

【讨论】: