package main import ( "context" "fmt" "os" "os/signal" "sync" "go.uber.org/zap" "git.derfenix.pro/fenix/protect_trans_info/application" ) func main() { cfg, err := application.NewConfig() if err != nil { panic(fmt.Sprintf("load config: %v", err)) } var logger *zap.Logger switch cfg.Devel { case true: logger, err = zap.NewDevelopment() case false: logger, err = zap.NewProduction() } if err != nil { panic(fmt.Sprintf("init logger: %v", err)) } ctx, cancel := signal.NotifyContext(context.Background(), os.Kill, os.Interrupt) defer cancel() app, err := application.NewApplication(ctx, cfg, logger) if err != nil { logger.Fatal("create application failed", zap.Error(err)) } wg := sync.WaitGroup{} go func() { <-ctx.Done() app.Stop(&wg) }() app.Start(&wg) wg.Wait() // Context did not stop the application if ctx.Err() == nil { os.Exit(2) } }