Skip to content

Commit 5081b11

Browse files
committed
more first commits
1 parent 643ed89 commit 5081b11

File tree

3 files changed

+111
-1
lines changed

3 files changed

+111
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# gowebapp
22
A first web app in golang
33

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/

db/db.go

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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+
}

ui/ui.go

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
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+
}

0 commit comments

Comments
 (0)