Maison > développement back-end > Golang > Comment utiliser le langage Go pour les opérations de base de données

Comment utiliser le langage Go pour les opérations de base de données

WBOY
Libérer: 2023-08-02 15:25:30
original
3006 Les gens l'ont consulté

Comment utiliser le langage Go pour les opérations de base de données

Introduction :
Le langage Go est un langage de programmation efficace et concis doté de puissantes capacités de concurrence et d'excellentes performances. Dans le processus de développement, l'interaction avec la base de données est un maillon très important. Cet article explique comment utiliser le langage Go pour les opérations de base de données, y compris la connexion à la base de données, les opérations CRUD et le traitement des transactions.

1. Se connecter à la base de données
Dans le langage Go, nous pouvons utiliser différents pilotes de base de données pour nous connecter à différents types de bases de données, telles que MySQL, PostgreSQL, SQLite, etc. En prenant MySQL comme exemple, vous devez d'abord installer le pilote MySQL. Exécutez simplement la commande suivante sur la ligne de commande :

go get github.com/go-sql-driver/mysql
Copier après la connexion

Ensuite, nous pouvons créer un pool de connexions à la base de données pour obtenir et libérer rapidement les connexions à la base de données. L'exemple de code est le suivant :

import (
    "database/sql"
    "fmt"

    _ "github.com/go-sql-driver/mysql"
)

func main() {
    // 连接数据库
    db, err := sql.Open("mysql", "username:password@tcp(localhost:3306)/databaseName?charset=utf8")
    if err != nil {
        fmt.Println("数据库连接失败:", err)
        return
    }

    defer db.Close()

    // 测试连接是否成功
    err = db.Ping()
    if err != nil {
        fmt.Println("数据库连接失败:", err)
        return
    }

    fmt.Println("连接数据库成功!")
}
Copier après la connexion

2. Opération CRUD
Ce qui suit est un exemple de code courant pour les opérations de base de données en langage Go.

  1. Interroger les données
func queryData(db *sql.DB) {
    rows, err := db.Query("SELECT id, name, age FROM users")
    if err != nil {
        fmt.Println("查询数据失败:", err)
        return
    }

    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        var age int
        err := rows.Scan(&id, &name, &age)
        if err != nil {
            fmt.Println("读取数据失败:", err)
            return
        }

        fmt.Println("ID:", id, "Name:", name, "Age:", age)
    }

    if err := rows.Err(); err != nil {
        fmt.Println("遍历数据失败:", err)
        return
    }
}
Copier après la connexion
  1. Insérer des données
func insertData(db *sql.DB) {
    stmt, err := db.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
    if err != nil {
        fmt.Println("插入数据失败:", err)
        return
    }

    defer stmt.Close()

    result, err := stmt.Exec("张三", 20)
    if err != nil {
        fmt.Println("插入数据失败:", err)
        return
    }

    rowAffected, err := result.RowsAffected()
    if err != nil {
        fmt.Println("获取影响的行数失败:", err)
        return
    }

    fmt.Println("成功插入", rowAffected, "行数据。")
}
Copier après la connexion
  1. Mettre à jour les données
func updateData(db *sql.DB) {
    stmt, err := db.Prepare("UPDATE users SET age=? WHERE name=?")
    if err != nil {
        fmt.Println("更新数据失败:", err)
        return
    }

    defer stmt.Close()

    result, err := stmt.Exec(25, "张三")
    if err != nil {
        fmt.Println("更新数据失败:", err)
        return
    }

    rowAffected, err := result.RowsAffected()
    if err != nil {
        fmt.Println("获取影响的行数失败:", err)
        return
    }

    fmt.Println("成功更新", rowAffected, "行数据。")
}
Copier après la connexion
  1. Supprimer les données
func deleteData(db *sql.DB) {
    stmt, err := db.Prepare("DELETE FROM users WHERE name=?")
    if err != nil {
        fmt.Println("删除数据失败:", err)
        return
    }

    defer stmt.Close()

    result, err := stmt.Exec("张三")
    if err != nil {
        fmt.Println("删除数据失败:", err)
        return
    }

    rowAffected, err := result.RowsAffected()
    if err != nil {
        fmt.Println("获取影响的行数失败:", err)
        return
    }

    fmt.Println("成功删除", rowAffected, "行数据。")
}
Copier après la connexion

3. Traitement des transactions
Lors de l'exécution d'opérations de base de données, il est parfois nécessaire de s'assurer que atomicité de plusieurs opérations , c'est-à-dire soit toutes réussissent, soit toutes échouent. À l’heure actuelle, le traitement des transactions est nécessaire. L'exemple de code est le suivant :

func transaction(db *sql.DB) {
    tx, err := db.Begin()
    if err != nil {
        fmt.Println("开启事务失败:", err)
        return
    }

    defer tx.Rollback()

    stmt, err := tx.Prepare("INSERT INTO users(name, age) VALUES(?, ?)")
    if err != nil {
        fmt.Println("插入数据失败:", err)
        return
    }

    defer stmt.Close()

    _, err = stmt.Exec("张三", 20)
    if err != nil {
        fmt.Println("插入数据失败:", err)
        return
    }

    stmt, err = tx.Prepare("UPDATE users SET age=? WHERE name=?")
    if err != nil {
        fmt.Println("更新数据失败:", err)
        return
    }

    defer stmt.Close()

    _, err = stmt.Exec(25, "张三")
    if err != nil {
        fmt.Println("更新数据失败:", err)
        return
    }

    err = tx.Commit()
    if err != nil {
        fmt.Println("提交事务失败:", err)
        return
    }

    fmt.Println("事务处理成功!")
}
Copier après la connexion

Conclusion :
Cet article explique comment utiliser le langage Go pour les opérations de base de données, y compris la connexion à la base de données, les opérations CRUD et le traitement des transactions. En étudiant ces exemples de codes, je pense que tout le monde pourra mieux utiliser le langage Go pour faire fonctionner la base de données et améliorer les performances et l'efficacité du programme. J'espère que cet article sera utile à tout le monde !

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!

Étiquettes associées:
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