gpt4 book ai didi

sql - 如何在go lang中从数据库中获取数据

转载 作者:IT王子 更新时间:2023-10-29 02:29:07 25 4
gpt4 key购买 nike

package main

import (
"encoding/json"
"gorilla/mux"
"log"
"net/http"
"database/sql"
_ "go-sql-driver/mysql"
)

func GetPeople(w http.ResponseWriter, r *http.Request, db *sql.DB) {
json.NewEncoder(w).Encode(db.QueryRow("SELECT * from test.animal"))
}

func main() {

db, err := sql.Open("mysql", "root:mariadb@tcp(127.0.0.1:3306)/test")
if err != nil {
panic(err.Error())
}
defer db.Close()
router := mux.NewRouter()

router.HandleFunc("/people", GetPeople).Methods("GET")

log.Fatal(http.ListenAndServe(":8000", router))
}

我需要让我的数据库在 GetPeople 函数中被识别,但是给函数第三个参数 (db *sql.DB) 是不可能的。

我该如何解决?谢谢

最佳答案

另一种方法是使用闭包,这可以防止全局使用变量:

func GetPeopleHandler(db *sql.DB) func (w http.ResponseWriter, r *http.Request) {
return func (w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(db.QueryRow("SELECT * from test.animal"))
}
}

func main() {
var err error
db, err = sql.Open("mysql", "root:mariadb@tcp(127.0.0.1:3306)/test")
if err != nil {
panic(err.Error())
}
defer db.Close()
router := mux.NewRouter()

router.HandleFunc("/people", GetPeopleHandler(db)).Methods("GET")

log.Fatal(http.ListenAndServe(":8000", router))
}

关于sql - 如何在go lang中从数据库中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46464859/

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