main.go (1085B)
1 package main 2 3 import ( 4 "context" 5 "lyrics/internal/config" 6 "lyrics/internal/log" 7 "lyrics/internal/server" 8 "net/http" 9 "os" 10 "time" 11 ) 12 13 func main() { 14 ctx := context.Background() 15 logger := log.New("appview") 16 ctx = log.IntoContext(ctx, logger) 17 18 config, err := config.LoadConfig(ctx) 19 if err != nil { 20 logger.Error("failed to load config", "err", err) 21 os.Exit(1) 22 } 23 24 state, err := server.New(ctx, config) 25 if err != nil { 26 logger.Error("failed to start server", "err", err) 27 os.Exit(1) 28 } 29 defer func() { 30 if err := state.Close(); err != nil { 31 logger.Error("failed to close state", "err", err) 32 } 33 }() 34 35 logger.Info("Starting server", "addr", config.Core.ListenAddr) 36 37 srv := &http.Server{ 38 Addr: config.Core.ListenAddr, 39 Handler: state.Router(), 40 ReadHeaderTimeout: 5 * time.Second, 41 ReadTimeout: 10 * time.Second, 42 WriteTimeout: 30 * time.Second, 43 IdleTimeout: 120 * time.Second, 44 } 45 46 err = srv.ListenAndServe() 47 if err != nil { 48 logger.Error("failed to start server", "err", err) 49 } 50 51 logger.Info("Shutdown complete.") 52 }