68 lines
1 KiB
Go
68 lines
1 KiB
Go
package database
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var (
|
|
db *gorm.DB
|
|
config mysql.Config
|
|
)
|
|
|
|
func Init() {
|
|
config = mysql.Config{
|
|
DSN: fmt.Sprintf(
|
|
"%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local",
|
|
fallback(os.Getenv("MYSQL_USERNAME"), "root"),
|
|
fallback(os.Getenv("MYSQL_PASSWORD"), "root"),
|
|
fallback(os.Getenv("MYSQL_HOST"), "127.0.0.1"),
|
|
fallback(os.Getenv("MYSQL_PORT"), "3306"),
|
|
fallback(os.Getenv("MYSQL_DATABASE"), "app"),
|
|
),
|
|
DefaultStringSize: 256,
|
|
DisableDatetimePrecision: true,
|
|
DontSupportRenameIndex: true,
|
|
DontSupportRenameColumn: true,
|
|
SkipInitializeWithVersion: false,
|
|
}
|
|
}
|
|
|
|
func GetDb() *gorm.DB {
|
|
var err error
|
|
|
|
if db == nil {
|
|
db, err = gorm.Open(mysql.New(config))
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
gdb, err := db.DB()
|
|
|
|
if err != nil {
|
|
db = nil
|
|
|
|
return GetDb()
|
|
}
|
|
|
|
if err = gdb.Ping(); err != nil {
|
|
db = nil
|
|
|
|
return GetDb()
|
|
}
|
|
|
|
return db
|
|
}
|
|
|
|
func fallback(value string, fb string) string {
|
|
if value == "" {
|
|
return fb
|
|
}
|
|
|
|
return value
|
|
}
|