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