From 35be6f27edaba0891a807fb5a6f9705008df6425 Mon Sep 17 00:00:00 2001 From: lbenedar Date: Wed, 4 Mar 2026 16:14:25 +0300 Subject: [PATCH] ch4.4 --- cmd/web/main.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/cmd/web/main.go b/cmd/web/main.go index d440ed1..94ad047 100644 --- a/cmd/web/main.go +++ b/cmd/web/main.go @@ -1,10 +1,13 @@ package main import ( + "database/sql" "flag" "log" "net/http" "os" + + _ "github.com/go-sql-driver/mysql" ) type application struct { @@ -15,17 +18,25 @@ type application struct { type config struct { addr string staticDir string + dsn 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.StringVar(&cfg.dsn, "dsn", "web:pass@/snippetbox?parseTime=true", "MySQL data source name") 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) + db, err := openDB(cfg.dsn) + if err != nil { + errorLog.Fatal(err) + } + defer db.Close() + app := &application{ errorLog: errorLog, infoLog: infoLog, @@ -38,6 +49,17 @@ func main() { } infoLog.Printf("Starting server on %s", cfg.addr) - err := srv.ListenAndServe() + err = srv.ListenAndServe() errorLog.Fatal(err) } + +func openDB(dsn string) (*sql.DB, error) { + db, err := sql.Open("mysql", dsn) + if err != nil { + return nil, err + } + if err = db.Ping(); err != nil { + return nil, err + } + return db, nil +}