Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.92 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "net/http"
  5.     "encoding/json"
  6.     "database/sql"
  7.     "github.com/gorilla/mux"
  8.     _ "github.com/go-sql-driver/mysql"
  9. )
  10.  
  11. type User struct {
  12.     Id int64 `json:"id"`
  13.     Name string `json:"name"`
  14.     Email string `json:"email"`
  15. }
  16.  
  17. func initDB() *sql.DB {
  18.     db, err := sql.Open("mysql", "root@/golang?charset=utf8")
  19.     if err != nil {
  20.         panic(err)
  21.     }
  22.     return db
  23. }
  24.  
  25. func main() {
  26.     router := mux.NewRouter()
  27.     router.HandleFunc("/users", getUsers).Methods("GET")
  28.     router.HandleFunc("/users/{id}", getUser).Methods("GET")
  29.     router.HandleFunc("/users", postUsers).Methods("POST")
  30.     http.ListenAndServe(":3000", router)
  31. }
  32.  
  33. func getUser(w http.ResponseWriter, r *http.Request) {
  34.     db := initDB()
  35.     w.Header().Set("Content-Type", "application/json")
  36.     var user User
  37.     err := db.QueryRow("SELECT * FROM users WHERE id=?", mux.Vars(r)["id"]).Scan(&user.Id, &user.Name, &user.Email)
  38.     switch {
  39.     case err == sql.ErrNoRows:
  40.         http.Error(w, "User not found!", 400)
  41.     case err != nil:
  42.         panic(err)
  43.     default:
  44.         json.NewEncoder(w).Encode(user)
  45.     }
  46. }
  47.  
  48. func getUsers(w http.ResponseWriter, r *http.Request) {
  49.     db := initDB()
  50.     w.Header().Set("Content-Type", "application/json")
  51.     rows, err := db.Query("SELECT * FROM users")
  52.     if err != nil {
  53.         panic(err)
  54.     }
  55.     var users = []User{}
  56.     for rows.Next() {
  57.         var user User
  58.         rows.Scan(&user.Id, &user.Name, &user.Email)
  59.         users = append(users, user)
  60.     }
  61.     json.NewEncoder(w).Encode(users)
  62. }
  63.  
  64. func postUsers(w http.ResponseWriter, r *http.Request) {
  65.     db := initDB()
  66.     w.Header().Set("Content-Type", "application/json")
  67.     query, err := db.Prepare("INSERT INTO users (name, email) VALUES (?, ?)")
  68.     if err != nil {
  69.         panic(err)
  70.     }
  71.     var user User
  72.     json.NewDecoder(r.Body).Decode(&user)
  73.     res, err := query.Exec(user.Name, user.Email)
  74.     if err != nil {
  75.         panic(err)
  76.     }
  77.     id, err := res.LastInsertId()
  78.     if err != nil {
  79.         panic(err)
  80.     }
  81.     user.Id = id
  82.     json.NewEncoder(w).Encode(user)
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement