golang redis 数据库连接文件

我正在尝试使用 golang、redis 和 mognodb 创建一个 url shortener,但面临实际数据库连接的问题。


在我的应用程序中,我有几个包:


base62

|

|_base62.go

config

|

|__redis.go

models

|

|__url.go

request

|

|__shorten_request.go

response

|

|__shorten_response.go

routes

|

|__shorten.go

    main.go

在我的 shorten.go 文件中:


func  Shorten(context *gin.Context){

    var request request.ShortenURLRequest

    if err := context.BindJSON(&request); err != nil {

        return

    }


    if !IsUrl(request.URL){

        context.IndentedJSON(http.StatusBadRequest, "Error")

        return 

    }

    // encode the long url

    short_url := base62.Encode(request.URL)


    // URL model

    var url models.URL

    url.ID = 1234567890

    url.LONG_URL = request.URL

    url.SHORT_URL = short_url


    // insert the data in redis db


    // create the response to send back to client

    var response response.ShortenURLResponse

    response.URL = request.URL

    response.SHORT_URL = short_url

    response.CREATED_AT = time.Now()


    context.IndentedJSON(http.StatusOK, response)

}

现在我想以缩短和解析文件可以访问数据库的方式创建数据库连接。


我得到的所有资源都有一个用于连接的文件,所有路由和控制器都在其中定义。


帮助将不胜感激



蛊毒传说
浏览 171回答 1
1回答

千万里不及你

根据您的main.go文件,我认为您可以这样做:func main() {    rdb, err := redis.NewClient()    if err != nil {        log.Fatal(err)    }    router := gin.Default()    router.POST("/api/v1/shorten", routes.Shorten(rdb))    router.GET("/api/v1/:url", routes.Resolve(rdb))    router.Run("localhost:9000")}func Shorten(rdb *redis.Client) gin.HandlerFunc {    return func(context *gin.Context) {        ctx := context.Request.Context()        ...                if err := rdb.Set(ctx, key, value); err != nil {            context.IndentedJSON(http.StatusInternalServerError, "Error")            return         }        ....    }}或者更好的是,您可以创建一个包含 redis 客户端并充当请求路由器的结构,如下所示:type Router struct {    rdb *redis.Client}func NewRouter(rdb *redis.Client) *Router {    return &Router{rdb: rdb}}func (r *Router) Shorten() gin.HandlerFunc {    return func(context *gin.Context) {        ...        r.rdb.Set()        ...    }}func (r *Router) Resolve() gin.HandlerFunc {    return func(context *gin.Context) {        ...        r.rdb.Get()        ...    }}func main() {    rdb, err := redis.NewClient()    if err != nil {        log.Fatal(err)    }    r := NewRouter(rdb)    router := gin.Default()    router.POST("/api/v1/shorten", r.Shorten)    router.GET("/api/v1/:url", r.Resolve)    router.Run("localhost:9000")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go