Seeders
Populate your database with test data and default records.
Seeders populate your database with initial or test data.
Creating a Seeder
package seeders
import "gorm.io/gorm"
func init() {
Register(&PostSeeder{})
}
type PostSeeder struct{}
func (s *PostSeeder) Name() string { return "PostSeeder" }
func (s *PostSeeder) Seed(db *gorm.DB) error {
posts := []models.Post{
{Title: "First Post", Body: "Hello, world!"},
{Title: "Second Post", Body: "Getting started with RapidGo"},
}
for _, p := range posts {
db.FirstOrCreate(&p, models.Post{Title: p.Title})
}
return nil
}
Running Seeders
# Run all seeders
go run cmd/main.go db:seed
# Run a specific seeder by name
go run cmd/main.go db:seed --seeder PostSeeder
Seeder Wiring
In cmd/main.go:
cli.SetSeeder(func(db *gorm.DB, name string) error {
if name != "" {
return seeders.RunByName(db, name)
}
return seeders.RunAll(db)
})
Best Practices
- Make seeders idempotent — use
FirstOrCreateto avoid duplicates - Keep seeders focused — one seeder per model or concern
- Use seeders for default admin users, settings, and test data