반응형
go lang에서 db에서 데이터를 가져오는 방법
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를 인식해야 하지만 함수에 세 번째 파라미터(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))
}
쉽게 만들 수 있습니다.db
변수 글로벌, 로컬이 아닌main()
:
var db *sql.DB
func GetPeople(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", GetPeople).Methods("GET")
log.Fatal(http.ListenAndServe(":8000", router))
}
관련 질문을 참조하십시오.
패키지 내의 파일 전체에서 글로벌 var를 사용하는 방법
Golang에서 글로벌 데이터베이스 연결과 연결 열기 간의 성능 차이
언급URL : https://stackoverflow.com/questions/46464859/how-to-fetch-data-from-db-in-go-lang
반응형
'programing' 카테고리의 다른 글
x초마다 메서드를 호출하려면 어떻게 해야 합니까? (0) | 2022.10.30 |
---|---|
0부터1자리 숫자 앞에 숫자를 붙여서 포맷하려면 어떻게 해야 하나요? (0) | 2022.10.30 |
표의 열 순서를 걱정할 이유가 있나요? (0) | 2022.10.30 |
JavaScript .protype은 어떻게 동작합니까? (0) | 2022.10.30 |
JQuery UI Datepicker 필드의 수동 입력을 비활성화하려면 어떻게 해야 합니까? (0) | 2022.10.30 |