package main import ( "flag" "fmt" "log" "net/http" "os" "time" ) const version = "1.0.0" type config struct { port int env string } type application struct { config config logger *log.Logger } func main() { var cfg config flag.IntVar(&cfg.port, "port", 4000, "API Server Port") flag.StringVar(&cfg.env, "env", "development", "Environment (development|staging|production") flag.Parse() logger := log.New(os.Stdout, "", log.Ldate|log.Ltime) app := &application{ config: cfg, logger: logger, } srv := &http.Server{ Addr: fmt.Sprintf(":%d", cfg.port), Handler: app.routes(), IdleTimeout: time.Minute, ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } logger.Printf("starting %s server on %s", cfg.env, srv.Addr) err := srv.ListenAndServe() logger.Fatal(err) }