gpt4 book ai didi

mysql - 使用 database/sql 从 golang 中的 mysql 中检索记录

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:09 26 4
gpt4 key购买 nike

我正在尝试从 mysql 表中检索记录并将其编码为 json。但我得到的错误是:“.\main.go:67: := 的左侧没有新变量我是 Golang Plz 的新手!帮我解决这个错误!我的代码是:

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

和主要路线:

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

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

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

最佳答案

在为现有变量分配新值时,从 err := 中删除冒号 :

关于mysql - 使用 database/sql 从 golang 中的 mysql 中检索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30774681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com