package main import ( "flag" "log" "net/http" "os" ) type application struct { errorLog *log.Logger infoLog *log.Logger } type config struct { addr string staticDir string } func main() { var cfg config flag.StringVar(&cfg.addr, "addr", ":4000", "HTTP network address") flag.StringVar(&cfg.staticDir, "static-dir", "./ui/static", "Path to static assets") flag.Parse() errorLog := log.New(os.Stderr, "ERROR\t", log.Ldate|log.Ltime|log.Lshortfile) infoLog := log.New(os.Stdout, "INFO\t", log.Ldate|log.Ltime) app := &application{ errorLog: errorLog, infoLog: infoLog, } mux := http.NewServeMux() fileServer := http.FileServer(http.Dir("./ui/static/")) mux.HandleFunc("/", app.home) mux.HandleFunc("/snippet/view", app.snippetView) mux.HandleFunc("/snippet/create", app.snippetCreate) mux.Handle("/static/", http.StripPrefix("/static", fileServer)) srv := &http.Server{ Addr: cfg.addr, ErrorLog: errorLog, Handler: mux, } infoLog.Printf("Starting server on %s", cfg.addr) err := srv.ListenAndServe() errorLog.Fatal(err) }