GIN이 각 HTTP 요청이 고유 한 DB 연결 (MySQL 연결)을 얻는 방법을 알고 싶습니다. 다음은 하나의 예제 코드입니다. 'db'는 전역 개체이므로 API 라우터 .GET ("/ person/: age"... DB에 액세스합니다.) 로드가되면 GIN은 내부적으로 동시성이 구현됩니다 . 그래, 그럼 어떻게합니까는 각 요청은 다른 연결을 얻는 것을 보장한다. 아니, 그때는 단일 스레드 imnplementation 인 경우는. 사람이 내 이해를 수정하시기 바랍니다 수 있다면.Gin + Golang + DB 연결 풀링
package main
import (
// "bytes"
"database/sql"
"fmt"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
"net/http"
)
func checkErr(err error) {
if err != nil {
panic(err)
} else {
fmt.Println("successful...")
}
}
func main() {
db, err := sql.Open("mysql", "abfl:[email protected](127.0.0.1:3306)/abfl?charset=utf8")
checkErr(err)
defer db.Close()
// make sure connection is available
err = db.Ping()
checkErr(err)
type User struct {
age int
name string
}
router := gin.Default()
// Add API handlers here
// GET a user detail
router.GET("/person/:age", func(c *gin.Context) {
var (
user User
result gin.H
)
age := c.Param("age")
fmt.Println("input age : '%d'", age)
row := db.QueryRow("select age, name from user where age = ?", age)
err = row.Scan(&user.age, &user.name)
fmt.Printf("user : %+v\n", user)
if err != nil {
// If no results send null
result = gin.H{
"user": nil,
"count": 0,
}
} else {
result = gin.H{
"age": user.age,
"name": user.name,
"count": 1,
}
}
c.JSON(http.StatusOK, result)
})
router.Run(":3000")
}
코드를 올바르게 포맷하십시오. 원래 게시 된 것처럼 완전히 읽을 수 없었습니다. 나는 그것을 편집했지만, 미래에는 게시 할 때 이것을하십시오. –
감사합니다. 왜 내 질문에 -2가 주어진다. 그것은 잘못된 질문입니까? 얘들 아, 나는 대답을 찾고있다. – siddhusingh
왜 각 요청마다 별도의 연결이 필요합니까? 실제로 좋은 프레임 워크는 데이터를 캐시 할 수 있으므로 페이지로드에는 데이터베이스 액세스가 포함될 수 없습니다. 또한 db 드라이버에는 자체 연결 풀이 있습니다. 따라서 웹 요청과 db 요청 간에는 직접적인 연관성이 없습니다. –