Skip to content

Commit 425a720

Browse files
committed
chore(golang): add code for making a database connection
Part of #9
1 parent cb3be9f commit 425a720

File tree

4 files changed

+74
-4
lines changed

4 files changed

+74
-4
lines changed

examples/go/app.go

+33-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,43 @@
11
package main
22

3+
import "database/sql"
34
import "fmt"
45
import "net/http"
56
import "os"
67
import "github.com/go-chi/chi"
78

9+
import _ "github.com/go-sql-driver/mysql"
10+
811
func main() {
12+
mapper := func(name string) string {
13+
value := os.Getenv(name)
14+
switch name {
15+
case "DB_HOST":
16+
if value == "" {
17+
value = "localhost"
18+
}
19+
case "DB_NAME", "DB_USER", "DB_PASSWORD":
20+
if value == "" {
21+
fmt.Fprintf(os.Stderr, "%s env variable is not set or empty\n", name)
22+
os.Exit(1)
23+
}
24+
}
25+
return value
26+
}
27+
28+
dsn := os.Expand("${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:3306)/${DB_NAME}", mapper)
29+
db, err := sql.Open("mysql", dsn)
30+
if err != nil {
31+
fmt.Fprintf(os.Stderr, "sql.Open failed: %v\n", err)
32+
os.Exit(1)
33+
}
34+
defer db.Close()
35+
36+
if err = db.Ping(); err != nil {
37+
fmt.Fprintf(os.Stderr, "Could not connect to database: %v\n", err)
38+
os.Exit(1)
39+
}
40+
941
r := chi.NewRouter()
1042
registerRoutes(r)
1143

@@ -15,7 +47,7 @@ func main() {
1547
}
1648

1749
fmt.Println("Listen on " + port)
18-
err := http.ListenAndServe(":"+port, r)
50+
err = http.ListenAndServe(":"+port, r)
1951
fmt.Fprintf(os.Stderr, "ListenAndServe failed: %v\n", err)
2052
os.Exit(1)
2153
}

examples/go/go.mod

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module main
22

33
go 1.14
44

5-
require github.com/go-chi/chi v4.1.2+incompatible
5+
require (
6+
github.com/go-chi/chi v4.1.2+incompatible
7+
github.com/go-sql-driver/mysql v1.5.0
8+
)

src/templates/app.go

+33-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,43 @@
11
package main
22

3+
import "database/sql"
34
import "fmt"
45
import "net/http"
56
import "os"
67
import "github.com/go-chi/chi"
78

9+
import _ "github.com/go-sql-driver/mysql"
10+
811
func main() {
12+
mapper := func(name string) string {
13+
value := os.Getenv(name)
14+
switch name {
15+
case "DB_HOST":
16+
if value == "" {
17+
value = "localhost"
18+
}
19+
case "DB_NAME", "DB_USER", "DB_PASSWORD":
20+
if value == "" {
21+
fmt.Fprintf(os.Stderr, "%s env variable is not set or empty\n", name)
22+
os.Exit(1)
23+
}
24+
}
25+
return value
26+
}
27+
28+
dsn := os.Expand("${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:3306)/${DB_NAME}", mapper)
29+
db, err := sql.Open("mysql", dsn)
30+
if err != nil {
31+
fmt.Fprintf(os.Stderr, "sql.Open failed: %v\n", err)
32+
os.Exit(1)
33+
}
34+
defer db.Close()
35+
36+
if err = db.Ping(); err != nil {
37+
fmt.Fprintf(os.Stderr, "Could not connect to database: %v\n", err)
38+
os.Exit(1)
39+
}
40+
941
r := chi.NewRouter()
1042
registerRoutes(r)
1143

@@ -15,7 +47,7 @@ func main() {
1547
}
1648

1749
fmt.Println("Listen on " + port)
18-
err := http.ListenAndServe(":"+port, r)
50+
err = http.ListenAndServe(":"+port, r)
1951
fmt.Fprintf(os.Stderr, "ListenAndServe failed: %v\n", err)
2052
os.Exit(1)
2153
}

src/templates/go.mod.ejs

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ module main
22

33
go 1.14
44

5-
require github.com/go-chi/chi v4.1.2+incompatible
5+
require (
6+
github.com/go-chi/chi v4.1.2+incompatible
7+
github.com/go-sql-driver/mysql v1.5.0
8+
)

0 commit comments

Comments
 (0)