Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "net/http"
- "encoding/json"
- "database/sql"
- "github.com/gorilla/mux"
- _ "github.com/go-sql-driver/mysql"
- )
- type User struct {
- Id int64 `json:"id"`
- Name string `json:"name"`
- Email string `json:"email"`
- }
- func initDB() *sql.DB {
- db, err := sql.Open("mysql", "root@/golang?charset=utf8")
- if err != nil {
- panic(err)
- }
- return db
- }
- func main() {
- router := mux.NewRouter()
- router.HandleFunc("/users", getUsers).Methods("GET")
- router.HandleFunc("/users/{id}", getUser).Methods("GET")
- router.HandleFunc("/users", postUsers).Methods("POST")
- http.ListenAndServe(":3000", router)
- }
- func getUser(w http.ResponseWriter, r *http.Request) {
- db := initDB()
- w.Header().Set("Content-Type", "application/json")
- var user User
- err := db.QueryRow("SELECT * FROM users WHERE id=?", mux.Vars(r)["id"]).Scan(&user.Id, &user.Name, &user.Email)
- switch {
- case err == sql.ErrNoRows:
- http.Error(w, "User not found!", 400)
- case err != nil:
- panic(err)
- default:
- json.NewEncoder(w).Encode(user)
- }
- }
- func getUsers(w http.ResponseWriter, r *http.Request) {
- db := initDB()
- w.Header().Set("Content-Type", "application/json")
- rows, err := db.Query("SELECT * FROM users")
- if err != nil {
- panic(err)
- }
- var users = []User{}
- for rows.Next() {
- var user User
- rows.Scan(&user.Id, &user.Name, &user.Email)
- users = append(users, user)
- }
- json.NewEncoder(w).Encode(users)
- }
- func postUsers(w http.ResponseWriter, r *http.Request) {
- db := initDB()
- w.Header().Set("Content-Type", "application/json")
- query, err := db.Prepare("INSERT INTO users (name, email) VALUES (?, ?)")
- if err != nil {
- panic(err)
- }
- var user User
- json.NewDecoder(r.Body).Decode(&user)
- res, err := query.Exec(user.Name, user.Email)
- if err != nil {
- panic(err)
- }
- id, err := res.LastInsertId()
- if err != nil {
- panic(err)
- }
- user.Id = id
- json.NewEncoder(w).Encode(user)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement