timeout := time.NewTimer(time.Minute)wait := make(chan struct{})go func() {
wg.Wait()
wait <- struct{}{}}()select {case <-timeout.C:
return WaitTimeoutErrorcase <-wait:
return nil}
完整的示例
这篇文章中的代码片段都是从这个完整的示例中提取的:https://github.com/Scalingo/go-graceful-restart-example
结论socket传递配合ForkExec使用确实是一种无干扰更新进程的有效方式,在最大时间上,新的连接会等待几毫秒——用于服务的启动和恢复socket,但这个时间很短。
这篇文章是我#周五技术系列的一部分,下这个周不会有新的更新了,大家圣诞节快乐。
链接:— Léo Unbekandt CTO @ Appsdeck
Ubuntu 安装Go语言包