使用database/sql在golang中从mysql检索记录。

huangapple go评论116阅读模式
英文:

Retrieve a record from mysql in golang using database/sql

问题

我正在尝试从MySQL表中检索记录并将其转换为JSON。但是我遇到了一个错误,错误信息是:“.\main.go:67: :=左侧没有新变量”。我是Golang的新手,请帮助我解决这个错误!以下是我的代码:

  1. func GetUser(w http.ResponseWriter, r *http.Request) {
  2. urlParams := mux.Vars(r)
  3. id := urlParams["id"]
  4. ReadUser := User{}
  5. con, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  6. err := con.QueryRow("select * from users where user_id=?", id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
  7. switch {
  8. case err == sql.ErrNoRows:
  9. fmt.Fprintf(w, "No such user")
  10. case err != nil:
  11. log.Fatal(err)
  12. default:
  13. output, _ := json.Marshal(ReadUser)
  14. fmt.Fprintf(w, string(output))
  15. }
  16. }
  17. func main() {
  18. gorillaRoute := mux.NewRouter()
  19. gorillaRoute.HandleFunc("/api/user/create", CreateUser)
  20. gorillaRoute.HandleFunc("/api/user/read/:id", GetUser)
  21. http.Handle("/", gorillaRoute)
  22. http.ListenAndServe(":8080", nil)
  23. }

这是我的新代码,但仍然无法从数据库表中获取记录,请帮助我找出错误或我做错了什么?

  1. package main
  2. import (
  3. "database/sql"
  4. "encoding/json"
  5. "fmt"
  6. "log"
  7. "net/http"
  8. _ "github.com/go-sql-driver/mysql"
  9. "github.com/gorilla/mux"
  10. )
  11. type API struct {
  12. Message string `json:"message"`
  13. }
  14. type User struct {
  15. ID int `json:"id"`
  16. Name string `json:"username"`
  17. Email string `json:"email"`
  18. First string `json:"first"`
  19. Last string `json:"last"`
  20. }
  21. func Hello(w http.ResponseWriter, r *http.Request) {
  22. // urlParams := mux.Vars(r)
  23. // name := urlParams["user"]
  24. HelloMessage := "User Creation page"
  25. message := API{HelloMessage}
  26. output, err := json.Marshal(message)
  27. if err != nil {
  28. fmt.Println("Something went wrong!")
  29. }
  30. fmt.Fprintf(w, string(output))
  31. }
  32. //POST A USER INTO DB
  33. func CreateUser(w http.ResponseWriter, r *http.Request) {
  34. NewUser := User{}
  35. NewUser.Name = r.FormValue("user")
  36. NewUser.Email = r.FormValue("email")
  37. NewUser.First = r.FormValue("first")
  38. NewUser.Last = r.FormValue("last")
  39. output, err := json.Marshal(NewUser)
  40. fmt.Println(string(output))
  41. if err != nil {
  42. fmt.Println("Something went wrong!")
  43. }
  44. con, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  45. sqlQuery := "INSERT INTO users set user_nickname='" + NewUser.Name + "', user_first='" + NewUser.First + "', user_last='" + NewUser.Last + "', user_email='" + NewUser.Email + "'"
  46. q, err := con.Exec(sqlQuery)
  47. if err != nil {
  48. fmt.Println(err)
  49. }
  50. fmt.Println(q)
  51. }
  52. //GET USERS FROM DB
  53. func GetUsers(w http.ResponseWriter, r *http.Request) {
  54. db, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  55. if err != nil {
  56. panic(err)
  57. }
  58. err = db.Ping()
  59. if err != nil {
  60. panic(err)
  61. }
  62. defer db.Close()
  63. rows, err := db.Query("select * from users ")
  64. if err != nil {
  65. log.Fatal(err)
  66. }
  67. defer rows.Close()
  68. var rowBuf, _ = rows.Columns()
  69. var cols = make([]string, len(rowBuf))
  70. copy(cols, rowBuf)
  71. fmt.Println(rowBuf)
  72. var vals = make([]interface{}, len(rowBuf))
  73. for i, _ := range rowBuf {
  74. vals[i] = &rowBuf[i]
  75. }
  76. for rows.Next() {
  77. err := rows.Scan(vals...)
  78. if err != nil {
  79. log.Fatal(err)
  80. }
  81. var m = map[string]interface{}{}
  82. for i, col := range cols {
  83. m[col] = vals[i]
  84. }
  85. obj, _ := json.Marshal(m)
  86. //
  87. fmt.Fprintf(w, string(obj))
  88. }
  89. err = rows.Err()
  90. if err != nil {
  91. log.Fatal(err)
  92. }
  93. }
  94. func GetUser(w http.ResponseWriter, r *http.Request) {
  95. urlParams := mux.Vars(r)
  96. id := urlParams["id"]
  97. ReadUser := User{}
  98. db, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  99. stmt := db.QueryRow("select * from users where id = ?", id)
  100. if err != nil {
  101. log.Fatal(err)
  102. }
  103. err = stmt.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
  104. if err != nil {
  105. log.Fatal(err)
  106. }
  107. result, err := json.Marshal(ReadUser)
  108. fmt.Fprintf(w, string(result))
  109. }
  110. func main() {
  111. gorillaRoute := mux.NewRouter()
  112. gorillaRoute.HandleFunc("/api/user/create", CreateUser)
  113. gorillaRoute.HandleFunc("/api/user/read", GetUsers)
  114. gorillaRoute.HandleFunc("/api/user/:id", GetUser)
  115. http.Handle("/", gorillaRoute)
  116. http.ListenAndServe(":8080", nil)
  117. }

希望这可以帮助你找到错误并解决问题!

英文:

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 :

  1. func GetUser(w http.ResponseWriter, r *http.Request) {
  2. urlParams := mux.Vars(r)
  3. id := urlParams["id"]
  4. ReadUser := User{}
  5. con, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  6. err := con.QueryRow("select * from users where user_id=?",id).Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email )
  7. switch {
  8. case err == sql.ErrNoRows:
  9. fmt.Fprintf(w,"No such user")
  10. case err != nil:
  11. log.Fatal(err)
  12. default:
  13. output, _ := json.Marshal(ReadUser)
  14. fmt.Fprintf(w,string(output))
  15. }
  16. }

and Routes in main:

  1. func main() {
  2. gorillaRoute := mux.NewRouter()
  3. gorillaRoute.HandleFunc("/api/user/create", CreateUser)
  4. gorillaRoute.HandleFunc("/api/user/read/:id", GetUser)
  5. http.Handle("/", gorillaRoute)
  6. http.ListenAndServe(":8080", nil)
  7. }

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

  1. import (
  2. "database/sql"
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. _ "github.com/go-sql-driver/mysql"
  8. "github.com/gorilla/mux"
  9. )
  10. type API struct {
  11. Message string "json:message"
  12. }
  13. type User struct {
  14. ID int "json:id"
  15. Name string "json:username"
  16. Email string "json:email"
  17. First string "json:first"
  18. Last string "json:last"
  19. }
  20. func Hello(w http.ResponseWriter, r *http.Request) {
  21. // urlParams := mux.Vars(r)
  22. // name := urlParams["user"]
  23. HelloMessage := "User Creation page"
  24. message := API{HelloMessage}
  25. output, err := json.Marshal(message)
  26. if err != nil {
  27. fmt.Println("Something went wrong!")
  28. }
  29. fmt.Fprintf(w, string(output))
  30. }
  31. //POST A USER INTO DB
  32. func CreateUser(w http.ResponseWriter, r *http.Request) {
  33. NewUser := User{}
  34. NewUser.Name = r.FormValue("user")
  35. NewUser.Email = r.FormValue("email")
  36. NewUser.First = r.FormValue("first")
  37. NewUser.Last = r.FormValue("last")
  38. output, err := json.Marshal(NewUser)
  39. fmt.Println(string(output))
  40. if err != nil {
  41. fmt.Println("Something went wrong!")
  42. }
  43. con, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  44. sqlQuery := "INSERT INTO users set user_nickname='" + NewUser.Name + "', user_first='" + NewUser.First + "', user_last='" + NewUser.Last + "', user_email='" + NewUser.Email + "'"
  45. q, err := con.Exec(sqlQuery)
  46. if err != nil {
  47. fmt.Println(err)
  48. }
  49. fmt.Println(q)
  50. }
  51. //GET USERS FROM DB
  52. func GetUsers(w http.ResponseWriter, r *http.Request) {
  53. db, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  54. if err != nil {
  55. panic(err)
  56. }
  57. err = db.Ping()
  58. if err != nil {
  59. panic(err)
  60. }
  61. defer db.Close()
  62. rows, err := db.Query("select * from users ")
  63. if err != nil {
  64. log.Fatal(err)
  65. }
  66. defer rows.Close()
  67. var rowBuf, _ = rows.Columns()
  68. var cols = make([]string, len(rowBuf))
  69. copy(cols, rowBuf)
  70. fmt.Println(rowBuf)
  71. var vals = make([]interface{}, len(rowBuf))
  72. for i, _ := range rowBuf {
  73. vals[i] = &rowBuf[i]
  74. }
  75. for rows.Next() {
  76. err := rows.Scan(vals...)
  77. if err != nil {
  78. log.Fatal(err)
  79. }
  80. var m = map[string]interface{}{}
  81. for i, col := range cols {
  82. m[col] = vals[i]
  83. }
  84. obj, _ := json.Marshal(m)
  85. //
  86. fmt.Fprintf(w, string(obj))
  87. }
  88. err = rows.Err()
  89. if err != nil {
  90. log.Fatal(err)
  91. }
  92. }
  93. func GetUser(w http.ResponseWriter, r *http.Request) {
  94. urlParams := mux.Vars(r)
  95. id := urlParams["id"]
  96. ReadUser := User{}
  97. db, err := sql.Open("mysql", "root:YES@/social_network?charset=utf8")
  98. stmt := db.QueryRow("select * from users where id = ?", id)
  99. if err != nil {
  100. log.Fatal(err)
  101. }
  102. err = stmt.Scan(&ReadUser.ID, &ReadUser.Name, &ReadUser.First, &ReadUser.Last, &ReadUser.Email)
  103. if err != nil {
  104. log.Fatal(err)
  105. }
  106. result, err := json.Marshal(ReadUser)
  107. fmt.Fprintf(w, string(result))
  108. }
  109. func main() {
  110. gorillaRoute := mux.NewRouter()
  111. gorillaRoute.HandleFunc("/api/user/create", CreateUser)
  112. gorillaRoute.HandleFunc("/api/user/read", GetUsers)
  113. gorillaRoute.HandleFunc("/api/user/:id", GetUser)
  114. http.Handle("/", gorillaRoute)
  115. http.ListenAndServe(":8080", nil)
  116. }

答案1

得分: 2

err :=中的冒号:移除,因为你正在给现有变量赋新值。

英文:

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

huangapple
  • 本文由 发表于 2015年6月11日 15:45:37
  • 转载请务必保留本文链接:https://go.coder-hub.com/30774681.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定