Maison >développement back-end >Golang >Comment accéder à une connexion à une base de données à partir d'une fonction dans Golang ?

Comment accéder à une connexion à une base de données à partir d'une fonction dans Golang ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-28 23:02:30890parcourir

How to Access a Database Connection from Within a Function in Golang?

Accès à la connexion à la base de données à partir d'une fonction dans Golang

Dans Golang, les opérations de base de données commencent généralement par l'ouverture d'une connexion à la base de données. Cependant, lorsque vous travaillez avec des fonctions qui nécessitent des interactions avec une base de données, il est souvent nécessaire de faire référence à la connexion ouverte.

Problème :

Considérez le scénario suivant :

<code class="go">func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    addRow(Room{
        Name: "Bedroom",
        Size: 12.5,
        ...
    })
}</code>

Dans cet exemple, la fonction main ouvre une connexion à une base de données, représentée par db. Cependant, la fonction addRow ne peut pas accéder directement à la base de données car elle est définie en dehors de la fonction principale.

Solution :

Il existe plusieurs façons de gérer cette situation :

Accès global :

Rendre la variable db globale en la déclarant en dehors de toute fonction, par exemple :

<code class="go">var db *sql.DB

func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    addRow(Room{
        Name: "Bedroom",
        Size: 12.5,
        ...
    })
}</code>

Cette approche permet à toutes les fonctions au sein le même package pour accéder à la variable db. Cependant, cela n'est pas recommandé pour les applications de longue durée, car les variables globales peuvent entraîner des fuites de ressources et un comportement inattendu.

Transmission de paramètres :

Passez la variable db en tant que paramètre. à la fonction addRow :

<code class="go">func addRow(db *sql.DB, row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (...)")
    ...
    return nil
}</code>

Cette méthode offre plus de contrôle sur la portée de la connexion à la base de données et permet une meilleure injection de dépendances.

Méthode de Struct :

Une autre option consiste à définir addRow comme méthode d'une structure qui stocke la connexion à la base de données :

<code class="go">type Database struct {
    db *sql.DB
}

func (db *Database) AddRow(row Room) error {
    stmt, err := db.db.Prepare("INSERT INTO Rooms (...)")
    ...
    return nil
}</code>

Cette approche encapsule la connexion à la base de données et fournit un moyen plus structuré d'y accéder.

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!

Déclaration:
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