Transacties en migraties
BEGIN/COMMIT-patronen en schemamigraties
Transacties en migraties is een gratis Go Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Go Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Go Academy bevat in totaal 4 lessen.
Transacties in database/sql
Omhul bewerkingen met een transactie via db.BeginTx. Voer aan het einde een commit of rollback uit; stel altijd een rollback uit om panics af te handelen.
tx, err := db.BeginTx(ctx, nil)
if err != nil { return err }
defer tx.Rollback() // no-op after Commit
_, err = tx.ExecContext(ctx, "UPDATE accounts SET balance=balance-100 WHERE id=$1", from)
if err != nil { return err }
_, err = tx.ExecContext(ctx, "UPDATE accounts SET balance=balance+100 WHERE id=$1", to)
if err != nil { return err }
return tx.Commit()Isolatieniveaus van transacties
Geef sql.TxOptions door om het isolatieniveau in te stellen:
tx, err := db.BeginTx(ctx, &sql.TxOptions{
Isolation: sql.LevelSerializable,
ReadOnly: false,
})Dezelfde Tx gebruiken in meerdere functies
Geef de *sql.Tx door aan hulpfuncties zodat ze allemaal aan dezelfde transactie deelnemen. Roep db.ExecContext niet aan binnen een transactie — gebruik tx.ExecContext.
Patroon met defer Rollback
Stel Rollback direct na BeginTx uit met defer. Als Commit slaagt, heeft de daaropvolgende Rollback geen effect. Als Commit mislukt, maakt Rollback de wijzigingen ongedaan.
tx, _ := db.BeginTx(ctx, nil)
defer tx.Rollback() // safe no-op after successful CommitSavepoints
Gebruik savepoints binnen een transactie voor gedeeltelijk terugdraaien (specifiek voor PostgreSQL via onbewerkte SQL):
tx.ExecContext(ctx, "SAVEPOINT sp1")
// ... work ...
tx.ExecContext(ctx, "ROLLBACK TO SAVEPOINT sp1") // partial rollbackOverzicht van databasemigraties
Migraties zijn SQL-scripts met versies die het schema stapsgewijs uitbreiden. Elke migratie heeft een up-richting (toepassen) en een down-richting (terugdraaien).
golang-migrate
github.com/golang-migrate/migrate/v4 voert SQL-migratiebestanden met versies in de juiste volgorde uit en houdt de toegepaste versie bij in een tabel met de naam schema_migrations.
m, _ := migrate.New("file://migrations", dsn)
m.Up() // apply all pending migrationsgoose
github.com/pressly/goose/v3 is een andere populaire migratiebibliotheek die migraties met SQL en Go-functies ondersteunt, met up- en down-opdrachten.
goose.Up(db, "migrations")Atlas voor schemabeheer
Atlas biedt declaratief schemabeheer: definieer de gewenste toestand van het schema en Atlas berekent het verschil en genereert automatisch migratiescripts.
Migraties uitvoeren bij het opstarten
Voer migraties programmatisch uit in main voordat je de server start, zodat het schema bij het uitrollen actueel is.
if err := runMigrations(db); err != nil { log.Fatal(err) }Beste werkwijzen voor migraties
Elke migratie: één aandachtspunt en voorwaarts compatibel (aanvullend). Verwijder kolommen nooit meteen — markeer ze als verouderd en verwijder ze in een latere migratie nadat de code er niet meer naar verwijst.
Korte controle
Waarom moet je tx.Rollback() altijd direct na BeginTx uitstellen?
Samenvatting: Transacties en migraties
Belangrijkste punten:
- BeginTx → defer Rollback → werk → Commit
- Geef *sql.Tx door aan hulpfuncties; gebruik tx.ExecContext in plaats van db.ExecContext
- golang-migrate of goose voor SQL-migraties met versies
- Voer migraties uit bij het opstarten; houd elke migratie aanvullend
Leer Go met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 51
- Lessen
- 203
Veelgestelde vragen
Is de les “Transacties en migraties” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Go Academy, waaronder “Transacties en migraties”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Go Academy bevat in totaal 4 lessen.
Wat leer ik in “Transacties en migraties”?
BEGIN/COMMIT-patronen en schemamigraties Je oefent met Go Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Go Academy te beginnen?
Ervaring vooraf is niet nodig. Go Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.
Hoe lang duurt de les “Transacties en migraties”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Go Academy?
Ja. Elke les over Go Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- database/sql en drivers
- sqlx: structs scannen en benoemde queries
- pgx: snelle PostgreSQL-driver
- Transacties en migraties