1. 系统中断信号注册

interrupt := make(chan os.Signal) // 可以控制强制终止的信号
// 如果系统有中断信号,发送给r.interrupt
signal.Notify(interrupt, os.Interrupt)


// Ctrl+C 退出
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
fmt.Printf("quit (%v)n", <-sig)

2. 通道接收多个返回值

通道接收的多参返回,如果可以接收的话,第一参数是接收的值,第二个表示通道是否关闭,false表示通道关闭,true表示通道正常。

res := make(chan io.Closer, size)
r, ok := <- res

3. go context

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	go func(ctx context.Context) {
		for {
			select {
			case <-ctx.Done():
				fmt.Println("监控退出,停止了...")
				return
			default:
				fmt.Println("goroutine监控中...")
				time.Sleep(2 * time.Second)
			}
		}
	}(ctx)

	time.Sleep(10 *