簡體   English   中英

如何打開和關閉數據庫連接

[英]How to open and close database connection

我是新手,現在想創建一個大項目,我的問題是現在應該在http請求中創建連接以及在何處關閉連接,現在我在main函數中聲明db並在所有請求中使用它,並且不要關閉連接:

package main

import (
    "fmt"
    "github.com/jinzhu/gorm"
    "github.com/kataras/iris"
    "github.com/kataras/iris/context"
    "github.com/kataras/iris/middleware/recover"
    _ "github.com/go-sql-driver/mysql"
)

var db *gorm.DB

func main() {


    port := "8080"

    app := iris.New()
    app.Configure()
    app.Logger().SetLevel("debug")

    app.Use(recover.New())

    db1, err := gorm.Open("mysql", "root:@/database?charset=utf8&parseTime=True&loc=Local")
    //db1, err := gorm.Open("mysql", "payro:AEkCpNhd@/payro_db?charset=utf8&parseTime=True&loc=Local")
    if err != nil {
        fmt.Println(err.Error())
        panic(err)
    }

    db=db1

    app.Get("/", func(i context.Context) {
        db.Exec("update tbl1 set col1=''")
        i.Next()
    })
    app.Get("/test", func(i context.Context) {
        db.Exec("update tbl2 set col2=''")
        i.Next()
    })
    _ = app.Run(iris.Addr(":"+port), iris.WithConfiguration(iris.Configuration{
        //DisableBodyConsumptionOnUnmarshal:true,

    }), iris.WithoutServerError(iris.ErrServerClosed))
}

這個代碼可以嗎?

您的代碼可能是測試/ POC代碼。 在生產項目中,您可以根據需要使用MVC或任何其他類型的體系結構。 很難確定項目的確切結構。 但是至少,您將需要創建一個db包,該包聲明一個與所有與DB相關的交互的接口。 例如

type UserDBRepo interface{
   AddUser(context.Context, *User)
   GetUser(context.Context, uint64)
}

type userDBRepo struct{ //implements UserDBRepo
   *sql.DB // or whatever type gorm.Open returns
}

func NewUserDBRepo(db *sql.DB) DBRepo{
  return &dbRepo{DB: db}
}

上面基本上代表了此示例的單個RDBMS表。 n n數據庫表可能有n這樣的文件。 現在,從main.go調用NewUserDBRepo並將此實例傳遞給需要此數據庫的所有服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM