我正在尝试使用 Go 进行一些基本的聊天(服务器 + 客户端),所以我有一个服务器监听特定端口,我有一个客户端写入这个端口。
但是,由于我是新手,所以我不断进行更改并且必须重新启动服务器等。每次我想停止服务器时我都在执行“Ctrl + C”但这显然很愚蠢,因为我必须更改每次编译的端口号......正确的方法是什么?我目前正在做
defer ln.Close()
在建立连接后服务器的主要功能中,但我猜 Ctrl + C 只是终止进程而不关闭连接?
编辑:更多信息。 我在 Windows 上运行 cygwin。 ps 显示没有旧进程,但我在任务管理器中发现了一个“server.exe”(我的服务器文件名为 server.go)。
最佳答案
除非您使用 os/signal
当您按下 Ctrl+C
时通知您的包将不会运行您的 defer 语句。
这里是一个处理 SIGINT (Ctrl+C) 的例子,可以干净地退出程序。
func main() {
done := make(chan os.Signal)
go signal.Notify(done, syscall.SIGINT)
go func() {
// your tcp server goes here along with the defer to clean up your server
}()
<-done
// exit cleanly
}
关于go - 从终端关闭服务器的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973382/