Как открыть и закрыть соединение с базой данных - PullRequest
0 голосов
/ 16 января 2019

Я новичок в деле и хочу создать большой проект мой вопрос, где следует создать соединение и где закрыть соединение в HTTP-запросах Теперь я объявляю БД в основной функции и использую во всех запросах и не закрываю соединение:

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))
}

этот код в порядке?

1 Ответ

0 голосов
/ 16 января 2019

Ваш код, возможно, является тестовым / POC-кодом. В производственном проекте вы можете использовать MVC или любую другую архитектуру в соответствии с вашими потребностями. Было бы трудно точно определить точную структуру вашего проекта. Но, по крайней мере, вы хотели бы создать пакет БД, который объявляет интерфейс для всех взаимодействий, связанных с БД. * 1001 например *

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 таких файлов. Теперь вызовите NewUserDBRepo из main.go и передайте этот экземпляр всем службам, которым требуется эта БД.

...