Skip to content

Instantly share code, notes, and snippets.

@emrahayanoglu
Forked from alexedwards/_tree
Created May 3, 2018 12:49
Show Gist options
  • Save emrahayanoglu/0e2a3487624ae466e6367c238680f525 to your computer and use it in GitHub Desktop.
Save emrahayanoglu/0e2a3487624ae466e6367c238680f525 to your computer and use it in GitHub Desktop.
.
├── books
│   ├── handlers.go
│   └── models.go
├── config
│   └── db.go
└── main.go
package config
import (
"database/sql"
_ "github.com/lib/pq"
"log"
)
var DB *sql.DB
func InitDB(dataSourceName string) {
var err error
DB, err = sql.Open("postgres", dataSourceName)
if err != nil {
log.Panic(err)
}
if err = DB.Ping(); err != nil {
log.Panic(err)
}
}
package books
import (
"fmt"
"net/http"
)
func BooksIndex(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, http.StatusText(405), 405)
return
}
bks, err := AllBooks()
if err != nil {
http.Error(w, http.StatusText(500), 500)
return
}
for _, bk := range bks {
fmt.Fprintf(w, "%s, %s, %s, £%.2f\n", bk.Isbn, bk.Title, bk.Author, bk.Price)
}
}
package main
import (
"bookstore/books"
"bookstore/config"
"net/http"
)
func main() {
config.InitDB("postgres://user:pass@localhost/bookstore")
http.HandleFunc("/books", books.BooksIndex)
http.ListenAndServe(":3000", nil)
}
package books
import "bookstore/config"
type Book struct {
Isbn string
Title string
Author string
Price float32
}
func AllBooks() ([]*Book, error) {
rows, err := config.DB.Query("SELECT * FROM books")
if err != nil {
return nil, err
}
defer rows.Close()
bks := make([]*Book, 0)
for rows.Next() {
bk := new(Book)
err := rows.Scan(&bk.Isbn, &bk.Title, &bk.Author, &bk.Price)
if err != nil {
return nil, err
}
bks = append(bks, bk)
}
if err = rows.Err(); err != nil {
return nil, err
}
return bks, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment