package main import ( "context" "fmt" "log" "os" "os/signal" "syscall" "time" ) func main() { app, err := New(Config{ MinimalTTL: time.Hour, ChainPostfix: "KVAS2_", TargetDNSServerAddress: "127.0.0.1:53", ListenPort: 7548, }) if err != nil { log.Fatalf("failed to initialize application: %v", err) } ctx, cancel := context.WithCancel(context.Background()) appErrsChan := make(chan []error) go func() { errs := app.Listen(ctx) appErrsChan <- errs }() fmt.Println("Started service...") c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) for { select { case appErrs, _ := <-appErrsChan: for _, err := range appErrs { // TODO: Error log level log.Printf("failed to start application: %v", err) } return case <-c: fmt.Println("Graceful shutdown...") cancel() } } }