12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package main
- import (
- "database/sql"
- "encoding/json"
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/gorilla/mux"
- "log"
- "net/http"
- )
- type API struct {
- Message string "json:message"
- }
- type User struct {
- ID int "json:id"
- Name string "json:username"
- Email string "json:email"
- First string "json:first"
- Last string "json:last"
- }
- var database *sql.DB
- func CreateUser(w http.ResponseWriter, r *http.Request) {
- NewUser := User{}
- NewUser.Name = r.FormValue("user")
- NewUser.Email = r.FormValue("email")
- NewUser.First = r.FormValue("first")
- NewUser.Last = r.FormValue("last")
- output, err := json.Marshal(NewUser)
- if err != nil {
- fmt.Println("Something went wrong with Marshal", err)
- }
- fmt.Println(string(output))
- sql := "INSERT INTO users SET user_nickname='" + NewUser.Name + "'" +
- ", user_first = '" + NewUser.First + "'" +
- ", user_last = '" + NewUser.Last + "'" +
- ", user_email = '" + NewUser.Email + "';"
- q, err := database.Exec(sql)
- if err != nil {
- fmt.Println("Something went wrong with INSERT", err)
- }
- last, err := q.LastInsertId()
- affected, err := q.RowsAffected()
- fmt.Printf("Last Id: %d, Affected rows: %d\n", last, affected)
- }
- func GetUser(w http.ResponseWriter, r *http.Request) {
- header := w.Header()
- header.Set("Pragma", "no-cache")
- urlParams := mux.Vars(r)
- id := urlParams["id"]
- ReadUser := User{}
- err := database.QueryRow("SELECT * FROM users WHERE user_id=?", id).Scan(
- &ReadUser.ID,
- &ReadUser.Name,
- &ReadUser.First,
- &ReadUser.Last,
- &ReadUser.Email,
- )
- if err != nil {
- fmt.Println("Something went wrong with QueryRow", err)
- }
- switch {
- case err == sql.ErrNoRows:
- fmt.Fprintf(w, "No such user")
- case err != nil:
- log.Fatal(err)
- fmt.Fprint(w, "Error")
- default:
- output, _ := json.Marshal(ReadUser)
- header.Set("Content-type", "application/json")
- fmt.Fprint(w, string(output))
- }
- }
- func main() {
- db, err := sql.Open("mysql", "goroot:gopass@/go_sn")
- if err != nil {
- fmt.Println("Something went wrong with sql.Open", err)
- return
- }
- database = db
- routes := mux.NewRouter()
- routes.HandleFunc("/api/{id:[\\d]+}", GetUser).Methods("GET")
- routes.HandleFunc("/api/user/create", CreateUser).Methods("GET")
- http.Handle("/", routes)
- http.ListenAndServe(":8080", nil)
- }
|