在Go语言中,优雅退出通常是指在接收到中断信号或其他终止信号时,让程序以一种安全、有序的方式退出,确保资源的正确释放和任务的完成。以下是常用的两种方式:
- 使用wg包,可以在接收到sig信号时进行优雅退出。示例代码如下:
package main
import (
"fmt"
"os"
"os/signal"
"sync"
"syscall"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// Wait for signals
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
sig := <-sigCh
fmt.Printf("Received signal: %v\n", sig)
}()
wg.Wait()
}
- 使用channel,可以在接收到sig信号时进行优雅退出。示例代码如下:
package main
import (
"fmt"
"os"
"os/signal"
)
func main() {
signals := make(chan os.Signal, 1)
done := make(chan bool, 1)
//signal
signal.Notify(signals, os.Interrupt)
go func() {
<-signals
fmt.Println("Interrupt signal received")
done <- true
}()
select {
case <-done:
fmt.Println("Exiting")
}
}