tx, err := db.Begin() if err != nil { // handle error } defer tx.Rollback() _, err = tx.Exec("INSERT INTO users (name, email) VALUES(?, ?)", "John", "[email protected]") if err != nil { // handle error } _, err = tx.Exec("UPDATE accounts SET balance = balance + ? WHERE user_id = ?", 100, 1) if err != nil { // handle error } err = tx.Commit() if err != nil { // handle error }
func updateUserAndAuditLog(db *sql.DB, userID int, name string, email string, logMessage string) error { tx, err := db.Begin() if err != nil { return err } defer tx.Rollback() _, err = tx.Exec("UPDATE users SET name = ?, email = ? WHERE id = ?", name, email, userID) if err != nil { return err } _, err = tx.Exec("INSERT INTO audit_logs (user_id, message) VALUES (?, ?)", userID, logMessage) if err != nil { return err } err = tx.Commit() if err != nil { return err } return nil }In both examples, the go database/sql package is used. The library being used may depend on the specific SQL database being used (e.g. lib/pq for Postgres).