package main import ( "log" "os" _ "github.com/go-sql-driver/mysql" // mysql driver mysqlDriver "github.com/go-sql-driver/mysql" "github.com/golang-migrate/migrate/v4" mysqlMigrate "github.com/golang-migrate/migrate/v4/database/mysql" _ "github.com/golang-migrate/migrate/v4/source/file" "sismedika.com/sas/westone/configs" "sismedika.com/sas/westone/db" ) func main() { cfg := mysqlDriver.Config{ User: configs.Envs.DBUser, Passwd: configs.Envs.DBPassword, Addr: configs.Envs.DBAddress, DBName: configs.Envs.DBName, Net: "tcp", AllowNativePasswords: true, ParseTime: true, } db, err := db.NewMySQLStorage(cfg) if err != nil { log.Fatal(err) } driver, err := mysqlMigrate.WithInstance(db.DB, &mysqlMigrate.Config{}) if err != nil { log.Fatal(err) } m, err := migrate.NewWithDatabaseInstance( "file://cmd/migrate/migrations", "mysql", driver, ) if err != nil { log.Fatal(err) } v, d, _ := m.Version() log.Printf("Version: %d, dirty: %v", v, d) cmd := os.Args[len(os.Args)-1] if cmd == "up" { if err := m.Up(); err != nil && err != migrate.ErrNoChange { log.Fatal(err) } } if cmd == "down" { if err := m.Down(); err != nil && err != migrate.ErrNoChange { log.Fatal(err) } } }