package main import ( "context" "log" "os" "os/signal" "strings" "syscall" omni "git.yuntuo.hk/k2safe/go-omni" "git.yuntuo.hk/k2safe/go-omni/config" "git.yuntuo.hk/k2safe/go-omni/logx" "{{.Module}}/internal/handler" "{{.Module}}/internal/service" "{{.Module}}/internal/servicecontext" ) func main() { if err := run(); err != nil { log.Fatal(err) } } func run() error { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() settings, err := config.LoadFromEnv("") if err != nil { return err } if strings.TrimSpace(settings.Log.Service) == "" { settings.Log.Service = "{{.Module}}" } logger, err := logx.New(settings.Log) if err != nil { return err } defer logger.Close() // Access logs and business logs share the same configured sink. logx.SetDefault(logger) services, err := servicecontext.New(ctx, logger) if err != nil { return err } defer services.Close() userService := service.NewUsers(services) userHandler := handler.NewUsers(userService) application := omni.New(omni.WithConfig(settings)) application.OnShutdown(logger.Close) application.OnShutdown(services.Close) application.GET("/health/live", services.Health.LivenessHandler()) application.GET("/health/ready", services.Health.ReadinessHandler()) userHandler.RegisterRoutes(application) return application.RunContext(ctx, settings.Address) }