package service import ( "database/sql" "fmt" "moredoc/conf" "moredoc/model" "github.com/go-sql-driver/mysql" "go.uber.org/zap" ) func SyncDB(cfg *conf.Config, logger *zap.Logger) { err := checkAndCreateDatabase(cfg.Database.DSN, logger) if err != nil { logger.Fatal("checkAndCreateDatabase", zap.Error(err)) return } lg := logger.Named("syncdb") lg.Info("start syncdb") dbModel, err := model.NewDBModel(&cfg.Database, logger) if err != nil { lg.Fatal("NewDBModel", zap.Error(err)) return } err = dbModel.SyncDB() if err != nil { lg.Fatal("SyncDB", zap.Error(err)) return } lg.Info("syncdb success") } func checkAndCreateDatabase(dsn string, loggger *zap.Logger) (err error) { cfg, err := mysql.ParseDSN(dsn) if err != nil { loggger.Error("ParseDSN", zap.Error(err)) return } dbName := cfg.DBName if dbName == "" { loggger.Error("ParseDSN", zap.String("database", "数据库名称不能为空")) return } conn := fmt.Sprintf("%s:%s@tcp(%s)/", cfg.User, cfg.Passwd, cfg.Addr) db, err := sql.Open("mysql", conn) if err != nil { loggger.Error("sql.Open", zap.Error(err)) return } createDB := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s` DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci", cfg.DBName) _, err = db.Exec(createDB) if err != nil { loggger.Error("db.Exec", zap.Error(err)) } return }