问题描述
我正在使用 gorilla/mux 来为我的 go 应用提供服务。为了保持那个 http 服务器的活跃,我在我的服务器命令中使用了这样的通道,如下所示。
&cobra.Command{
Use: "server",Run: func(cmd *cobra.Command,args []string) {
_,_,serverErr := runServer()
if serverErr != nil {
panic(err)
}
// keep the command up and running until it gets terminated
c := make(chan os.Signal,2)
signal.Notify(c,syscall.SIGINT,syscall.SIGTERM)
<-c
}
runServer 内部:
p := conf.Server.Port
listener,err := net.Listen("tcp",":"+p)
if err != nil {
return nil,nil,errors.Wrap(err,"Unable to start server")
}
server := &http.Server{Handler: srv}
go func() {
if err := server.Serve(listener); err != nil {
fmt.Println(err)
}
}()
logger.Infof("Service available at port %s",p)
return server,listener,nil
并且我正在尝试为自动监视我的更改实施 air 并再次重新编译并运行服务器命令。
问题是当 air 重新运行服务器命令时,服务器给出端口已经使用错误,因为通道仍然有效。有什么办法可以杀死来自 cmd 的信号并再次运行,或者有其他方法可以杀死端口并再次运行吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)