當初始化項目的時候,以前須要手動導入數據庫sql文件,如今能夠直接在命令行參數裏輸入go-fly install ,就能夠把數據庫文件導進去了html
實現方式就是使用gorm執行sql文件裏面的每行sql語句mysql
讀入sql文件後把字符串按照分號分隔,轉成[]string ,而後再循環執行git
實例代碼是(自行更改文件目錄):github
func install(){ sqlFile:=config.Dir+"go-fly.sql" isExit,_:=tools.IsFileExist(config.MysqlConf) dataExit,_:=tools.IsFileExist(sqlFile) if !isExit||!dataExit{ fmt.Println("config/mysql.json 數據庫配置文件或者數據庫文件go-fly.sql不存在") os.Exit(1) } sqls,_:=ioutil.ReadFile(sqlFile) sqlArr:=strings.Split(string(sqls),";") for _,sql:=range sqlArr{ if sql==""{ continue } models.Execute(sql) } }
go-fly代碼中數據庫操做類sql
package models import ( "fmt" "github.com/jinzhu/gorm" "github.com/taoshihan1991/imaptool/config" "time" ) var DB *gorm.DB type Model struct { ID uint `gorm:"primary_key" json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt *time.Time `sql:"index" json:"deleted_at"` } func init(){ mysql:=config.CreateMysql() dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8&parseTime=True&loc=Local", mysql.Username, mysql.Password, mysql.Server, mysql.Port, mysql.Database) DB,_=gorm.Open("mysql",dsn) DB.SingularTable(true) DB.LogMode(true) DB.DB().SetMaxIdleConns(10) DB.DB().SetMaxOpenConns(100) } func Execute(sql string){ DB.Exec(sql) } func CloseDB() { defer DB.Close() }
簡化的邏輯就是gorm open之後獲得的實例執行一下Exec方法,執行sql語句數據庫
執行完成之後的效果:json