package main import ( "context" "embed" "fmt" "time" "github.com/golang-migrate/migrate/v4" _ "github.com/golang-migrate/migrate/v4/database/sqlite3" "github.com/golang-migrate/migrate/v4/source/iofs" "gorm.io/driver/sqlite" "gorm.io/gorm" ) //go:embed migrations/*.sql var migrations embed.FS func main() { ctx := context.Background() // Execute migrations migrationsFS, err := iofs.New(migrations, "migrations") if err != nil { panic(err) } migrator, err := migrate.NewWithSourceInstance("iofs", migrationsFS, "sqlite3://test.db") if err != nil { panic(err) } if err := migrator.Up(); err != nil && err != migrate.ErrNoChange { panic(err) } // Connect to database db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } // Insert err = gorm.G[EntryEntity](db).Create(ctx, &EntryEntity{ Message: "Hello World", Timestamp: time.Now().Format(time.RFC3339), }) if err != nil { panic(err) } fmt.Println("successfully added an entry") // Read entries, err := gorm.G[EntryEntity](db).Find(ctx) if err != nil { panic(err) } fmt.Println("successfully read all entries") for _, entry := range entries { fmt.Printf("- [%04d][%s]: %s\n", entry.ID, entry.Timestamp, entry.Message) } }