dongyong1897 2015-06-11 07:45
浏览 54

使用数据库/ SQL在Golang中从mysql检索记录

I'm trying to retrieve a record from mysql table and marshal it to json. But i gotted the error that says : ".\main.go:67: no new variables on left sife of :=" I'm new in Golang Plz! help me to solve out this error! My Code is :

func GetUser(w http.ResponseWriter, r *http.Request) {

  urlParams   := mux.Vars(r)
  id       := urlParams["id"]
  ReadUser := User{}
  con, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")

  err := con.QueryRow("select * from users where user_id=?",id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email )
  switch {
      case err == sql.ErrNoRows:
              fmt.Fprintf(w,"No such user")
      case err != nil:
              log.Fatal(err)
      default:
        output, _ := json.Marshal(ReadUser)
        fmt.Fprintf(w,string(output))
  }
}

and Routes in main:

func main() {

  gorillaRoute := mux.NewRouter()
  gorillaRoute.HandleFunc("/api/user/create", CreateUser)
  gorillaRoute.HandleFunc("/api/user/read/:id", GetUser)
  http.Handle("/", gorillaRoute)
  http.ListenAndServe(":8080", nil)
}

Here is my new Code , but again not able to get record from database table, plz help me to figure out the error OR what things i do wrong? package main

import (
    "database/sql"
    "encoding/json"
    "fmt"
    "log"
    "net/http"

    _ "github.com/go-sql-driver/mysql"
    "github.com/gorilla/mux"
)

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"
}

func Hello(w http.ResponseWriter, r *http.Request) {

    // urlParams := mux.Vars(r)
    // name := urlParams["user"]
    HelloMessage := "User Creation page"

    message := API{HelloMessage}
    output, err := json.Marshal(message)

    if err != nil {
        fmt.Println("Something went wrong!")
    }

    fmt.Fprintf(w, string(output))

}

//POST A USER INTO 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)
    fmt.Println(string(output))
    if err != nil {
        fmt.Println("Something went wrong!")
    }
    con, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
    sqlQuery := "INSERT INTO users set user_nickname='" + NewUser.Name + "', user_first='" + NewUser.First + "', user_last='" + NewUser.Last + "', user_email='" + NewUser.Email + "'"
    q, err := con.Exec(sqlQuery)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(q)
}

//GET USERS FROM DB
func GetUsers(w http.ResponseWriter, r *http.Request) {

    db, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
    if err != nil {
        panic(err)
    }
    err = db.Ping()
    if err != nil {
        panic(err)
    }
    defer db.Close()
    rows, err := db.Query("select * from users ")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    var rowBuf, _ = rows.Columns()
    var cols = make([]string, len(rowBuf))
    copy(cols, rowBuf)
    fmt.Println(rowBuf)
    var vals = make([]interface{}, len(rowBuf))
    for i, _ := range rowBuf {
        vals[i] = &rowBuf[i]
    }
    for rows.Next() {
        err := rows.Scan(vals...)
        if err != nil {
            log.Fatal(err)
        }
        var m = map[string]interface{}{}
        for i, col := range cols {
            m[col] = vals[i]
        }
        obj, _ := json.Marshal(m)
        //
        fmt.Fprintf(w, string(obj))
    }
    err = rows.Err()
    if err != nil {
        log.Fatal(err)
    }
}
func GetUser(w http.ResponseWriter, r *http.Request) {
    urlParams := mux.Vars(r)
    id := urlParams["id"]
    ReadUser := User{}
    db, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
    stmt := db.QueryRow("select * from users where id = ?", id)
    if err != nil {
        log.Fatal(err)
    }

    err = stmt.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
    if err != nil {
        log.Fatal(err)
    }

    result, err := json.Marshal(ReadUser)
    fmt.Fprintf(w, string(result))
}
func main() {

    gorillaRoute := mux.NewRouter()
    gorillaRoute.HandleFunc("/api/user/create", CreateUser)
    gorillaRoute.HandleFunc("/api/user/read", GetUsers)
    gorillaRoute.HandleFunc("/api/user/:id", GetUser)
    http.Handle("/", gorillaRoute)
    http.ListenAndServe(":8080", nil)
}
  • 写回答

1条回答 默认 最新

  • drol55885602 2015-06-11 07:57
    关注

    Remove the colon : from err := as you are assigning a new value to existing variable.

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入