Maison > développement back-end > Golang > le corps du texte

Comment gérer les transactions Golang

PHPz
Libérer: 2023-04-24 10:07:08
original
1600 Les gens l'ont consulté

Le langage Go (golang) est un langage compilé développé à l'origine par Google et lancé en 2009. Il est conçu pour améliorer la productivité et la maintenabilité des programmeurs et tente de fournir une solution fiable en termes de code facile à écrire et à comprendre. Lorsque vous utilisez Golang pour le traitement de bases de données, le traitement des transactions est inévitable. Cet article explorera comment gérer les transactions Golang.

1. Qu'est-ce que le traitement des transactions ?

Une transaction est une séquence d'opérations qui sont soit toutes exécutées, soit aucune. L'utilisation la plus courante des transactions consiste à traiter des opérations de lecture et d'écriture de données, telles que l'interrogation de données dans une table, la mise à jour de données ou l'exécution d'opérations de suppression. Les transactions peuvent garantir qu'une série d'opérations liées sont terminées ensemble. Si l'une des opérations échoue, la transaction entière sera restaurée à son état d'origine. Cela signifie qu'après une panne, toutes les opérations effectuées seront annulées et la structure restera cohérente, garantissant ainsi l'intégrité des données.

Dans une base de données, une transaction peut être considérée comme une unité logique d'opérations. Une transaction peut impliquer une ou plusieurs opérations de base de données, et le statut des opérations est suivi pour garantir que toutes les opérations sont terminées avec succès.

2. Comment Golang utilise les transactions

Dans Golang, le traitement des transactions nécessite l'utilisation de Begin(), Commit(), Rollback() et d'autres fonctions dans la base de données/package SQL. Ces fonctions gèrent les transactions dans la base de données. Ci-dessous, nous présenterons ces fonctions une par une. La fonction

  1. Begin()

Begin() est utilisée pour démarrer une nouvelle transaction et renvoie un objet Tx. Si une erreur se produit lors du démarrage d'une nouvelle transaction, l'erreur appropriée sera renvoyée.

Exemple de code :

tx, err := db.Begin()
if err != nil {
    log.Fatal(err)
}
Copier après la connexion
  1. Commit()

La fonction Commit() est utilisée pour valider une transaction. Si une erreur se produit pendant la transaction, l'opération de validation de la transaction sera annulée.

Exemple de code :

err := tx.Commit()
if err != nil {
    log.Fatal(err)
}
Copier après la connexion
  1. Rollback()

La fonction Rollback() est utilisée pour annuler une transaction pendant le processus de transaction. Si une erreur se produit lors de la restauration, l'opération sera annulée.

Exemple de code :

err := tx.Rollback()
if err != nil {
    log.Fatal(err)
}
Copier après la connexion
  1. Exec()

La fonction Exec() est utilisée pour exécuter des instructions SQL. Si l'instruction SQL est exécutée avec succès, un objet Result sera renvoyé. Si l'exécution de l'instruction SQL échoue, l'erreur correspondante sera renvoyée.

Exemple de code :

result, err := tx.Exec("INSERT INTO users (id, name) VALUES (?, ?)", 1, "John")
if err != nil {
    log.Fatal(err)
}
Copier après la connexion
  1. Prepare()

La fonction Prepare() est utilisée pour préparer une instruction SQL, qui renverra un objet Stmt. Cette fonction est généralement utilisée lors de l'exécution de plusieurs instructions SQL identiques, par exemple dans une transaction.

Exemple de code :

stmt, err := tx.Prepare("INSERT INTO users (id, name) VALUES (?, ?)")
if err != nil {
    log.Fatal(err)
}
Copier après la connexion
  1. Stmt.Exec()

La fonction Stmt.Exec() est utilisée pour exécuter une instruction SQL préparée, qui peut recevoir des paramètres pendant l'exécution. Si l'instruction SQL est exécutée avec succès, un objet Result sera renvoyé. Si l'exécution de l'instruction SQL échoue, l'erreur correspondante sera renvoyée.

Exemple de code :

result, err := stmt.Exec(1, "John")
if err != nil {
    log.Fatal(err)
}
Copier après la connexion

3. Exemple de code

L'exemple de code suivant montre comment utiliser Golang pour gérer les transactions de base de données.

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "log"
)

func main() {
    // 连接数据库
    db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test")
    if err != nil {
        log.Fatal(err)
    }

    // 启动新事务
    tx, err := db.Begin()
    if err != nil {
        log.Fatal(err)
    }

    // 准备SQL语句
    stmt, err := tx.Prepare("INSERT INTO users (id, name) VALUES (?, ?)")
    if err != nil {
        log.Fatal(err)
    }

    // 执行SQL语句
    _, err = stmt.Exec(1, "John")
    if err != nil {
        // 回滚事务
        tx.Rollback()
        log.Fatal(err)
    }

    // 提交事务
    err = tx.Commit()
    if err != nil {
        log.Fatal(err)
    }

    // 查询结果
    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        log.Fatal(err)
    }

    // 处理查询结果
    for rows.Next() {
        var id int
        var name string
        err = rows.Scan(&id, &name)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("id:%d, name:%s\n", id, name)
    }
    rows.Close()
}
Copier après la connexion

4. Résumé

Pour traiter les transactions dans Golang, vous devez utiliser des fonctions telles que Begin(), Commit(), Rollback(), Exec() et Prepare(). En utilisant ces fonctions, vous pouvez gérer efficacement les transactions dans la base de données. Lors de l'écriture d'applications Golang, le traitement des transactions est un problème inévitable. Ce n'est que grâce à un traitement transactionnel raisonnable que l'exactitude et l'intégrité des données peuvent être garanties.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal