File tree 3 files changed +111
-1
lines changed
3 files changed +111
-1
lines changed Original file line number Diff line number Diff line change 1
1
# gowebapp
2
2
A first web app in golang
3
3
4
- This is my first stumbling step in golang for a web app.
4
+ This is my first stumbling step in golang for a web app. This is all based on the fantastic tutorial by Grisha at https://grisha.org/blog/2017/04/27/simplistic-go-web-app/
Original file line number Diff line number Diff line change
1
+ package db
2
+
3
+ import (
4
+ "database/sql"
5
+
6
+ "github.com/lePereT/gowebapp/model"
7
+ "github.com/jmoiron/sqlx"
8
+ _ "github.com/lib/pq"
9
+ )
10
+
11
+ type Config struct {
12
+ ConnectString string
13
+ }
14
+
15
+ func InitDb (cfg Config ) (* pgDb , error ) {
16
+ if dbConn , err := sqlx .Connect ("postgres" , cfg .ConnectString ); err != nil {
17
+ return nil , err
18
+ } else {
19
+ p := & pgDb {dbConn : dbConn }
20
+ if err := p .dbConn .Ping (); err != nil {
21
+ return nil , err
22
+ }
23
+ if err := p .createTablesIfNotExist (); err != nil {
24
+ return nil , err
25
+ }
26
+ if err := p .prepareSqlStatements (); err != nil {
27
+ return nil , err
28
+ }
29
+ return p , nil
30
+ }
31
+ }
32
+
33
+ type pgDb struct {
34
+ dbConn * sqlx.DB
35
+
36
+ sqlSelectPeople * sqlx.Stmt
37
+ }
38
+
39
+ func (p * pgDb ) createTablesIfNotExist () error {
40
+ create_sql := `
41
+
42
+ CREATE TABLE IF NOT EXISTS people (
43
+ id SERIAL NOT NULL PRIMARY KEY,
44
+ first TEXT NOT NULL,
45
+ last TEXT NOT NULL);
46
+
47
+ `
48
+ if rows , err := p .dbConn .Query (create_sql ); err != nil {
49
+ return err
50
+ } else {
51
+ rows .Close ()
52
+ }
53
+ return nil
54
+ }
55
+
56
+ func (p * pgDb ) prepareSqlStatements () (err error ) {
57
+
58
+ if p .sqlSelectPeople , err = p .dbConn .Preparex (
59
+ "SELECT id, first, last FROM people" ,
60
+ ); err != nil {
61
+ return err
62
+ }
63
+
64
+ return nil
65
+ }
Original file line number Diff line number Diff line change
1
+ package ui
2
+
3
+ import (
4
+ "fmt"
5
+ "net"
6
+ "net/http"
7
+ "time"
8
+
9
+ "github.com/lePereT/gowebapp/model"
10
+ )
11
+
12
+ type Config struct {
13
+ Assets http.FileSystem
14
+ }
15
+
16
+ func Start (cfg Config , m * model.Model , listener net.Listener ) {
17
+
18
+ server := & http.Server {
19
+ ReadTimeout : 60 * time .Second ,
20
+ WriteTimeout : 60 * time .Second ,
21
+ MaxHeaderBytes : 1 << 16 }
22
+
23
+ http .Handle ("/" , indexHandler (m ))
24
+
25
+ go server .Serve (listener )
26
+ }
27
+
28
+ const indexHTML = `
29
+ <!DOCTYPE HTML>
30
+ <html>
31
+ <head>
32
+ <meta charset="utf-8">
33
+ <title>Simple Go Web App</title>
34
+ </head>
35
+ <body>
36
+ <div id='root'></div>
37
+ </body>
38
+ </html>
39
+ `
40
+
41
+ func indexHandler (m * model.Model ) http.Handler {
42
+ return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
43
+ fmt .Fprintf (w , indexHTML )
44
+ })
45
+ }
You can’t perform that action at this time.
0 commit comments