Sobes.tech
Back to questions
Middle+
5

Синтаксис транзакций в Go/SQL?

Companies where asked
Magnit Tech

Answer from AI

sobes.tech AI

В Go для работы с транзакциями в базе данных используется пакет database/sql. Основные шаги:

  1. Начать транзакцию с помощью db.Begin().
  2. Выполнить необходимые операции через объект транзакции tx.
  3. Зафиксировать изменения вызовом tx.Commit() или отменить с помощью tx.Rollback().

Пример:

import (
    "database/sql"
    _ "github.com/lib/pq" // драйвер для PostgreSQL
)

func doTransaction(db *sql.DB) error {
    tx, err := db.Begin()
    if err != nil {
        return err
    }

    _, err = tx.Exec("INSERT INTO users(name) VALUES($1)", "Alice")
    if err != nil {
        tx.Rollback()
        return err
    }

    _, err = tx.Exec("UPDATE accounts SET balance = balance - 100 WHERE user_id = $1", 1)
    if err != nil {
        tx.Rollback()
        return err
    }

    return tx.Commit()
}

Важно всегда обрабатывать ошибки и вызывать Rollback при ошибках, чтобы не оставлять транзакцию открытой.