commit fd99a241acfcd3a60a8a5d09779f34b8486a858f Author: Dipesh Dulal Date: Sat Jan 16 10:14:11 2021 +0545 feat: initial commit diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..43c608d --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +DB_DSN=postgres://username:password@localhost/scheduling?sslmode=disable \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2eea525 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a460645 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "go.inferGopath": false +} \ No newline at end of file diff --git a/db.go b/db.go new file mode 100644 index 0000000..e0f1c72 --- /dev/null +++ b/db.go @@ -0,0 +1,20 @@ +package main + +import ( + "database/sql" + "log" + "os" + + _ "github.com/lib/pq" +) + +func initDBConnection() *sql.DB { + connStr := os.Getenv("DB_DSN") + db, err := sql.Open("postgres", connStr) + + if err != nil { + log.Panic("couldn't connect to database", err) + } + + return db +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..5e241fd --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/dipeshdulal/event-scheduling + +go 1.15 + +require ( + github.com/joho/godotenv v1.3.0 + github.com/lib/pq v1.9.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..8b0bab8 --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/lib/pq v1.9.0 h1:L8nSXQQzAYByakOFMTwpjRoHsMJklur4Gi59b6VivR8= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= diff --git a/main.go b/main.go new file mode 100644 index 0000000..db6d6f5 --- /dev/null +++ b/main.go @@ -0,0 +1,52 @@ +package main + +import ( + "context" + "log" + "os" + "os/signal" + + "github.com/joho/godotenv" +) + +// Test structure +type Test struct { + ID uint + Name string +} + +func main() { + ctx, cancel := context.WithCancel(context.Background()) + interrupt := make(chan os.Signal, 1) + + if err := godotenv.Load(); err != nil { + log.Fatal("Error loading .env file ", err) + } + + db := initDBConnection() + + rows, err := db.Query("SELECT id, name FROM public.test") + + if err != nil { + log.Panic(err) + } + + go func() { + for rows.Next() { + var test Test + rows.Scan(&test.ID, &test.Name) + log.Printf("test: %v\n", test) + } + }() + + signal.Notify(interrupt, os.Interrupt) + + go func() { + for range interrupt { + log.Print("Interrupt received closing...") + cancel() + } + }() + + <-ctx.Done() +}