package data_source import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "jin_project/models/chapter01" "sync" ) type ConnPool struct {} // 单利 var once sync.Once var Db *gorm.DB var pool *ConnPool var err error func (p *ConnPool) InitPool() (bool) { mysql_conf := LoadMysqlConf() data_source := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", mysql_conf.UserName, mysql_conf.Password, mysql_conf.Host, mysql_conf.Port, mysql_conf.Database, ) //------------ 连接数据库 Db, err = gorm.Open("mysql", data_source) if err != nil { //panic可以终止程序 //panic(err) return false } Db.LogMode(mysql_conf.LogMode) //自动迁移 Db.AutoMigrate( &chapter01.User{}, ) return true } func NewConn() (*ConnPool){ once.Do(func() { pool = &ConnPool{} }) return pool }
在其他地方使用:
data_source.NewConn().InitPool()
data_source.Db.Create(&user)
// 最后的Close()很重要,别忘了 ????
data_source.Db.Close()