package main12import (3"fmt"4"os"5"os/signal"6"syscall"7)89type Signals struct {10sigc chan os.Signal11IsClosed bool12}1314func RegisterSignals() *Signals {15sigc := make(chan os.Signal, 1)16signals := &Signals{17IsClosed: false,18sigc: sigc,19}2021signal.Notify(sigc, os.Interrupt, os.Kill, syscall.SIGINT, syscall.SIGTERM)2223go func() {24_, err := fmt.Scanf("disconnect")25if err != nil {26panic(err)27}28sigc <- syscall.SIGINT29}()3031go func(sigs *Signals) {32<-sigc33sigs.IsClosed = true34}(signals)3536return signals37}383940