Référencement d'une connexion à une base de données ouverte dans une fonction dans Go
Lorsque vous travaillez avec des bases de données dans Go, il est courant d'établir une connexion à la base de données dans la fonction principale, puis utilisez cette connexion dans toute l'application. Cependant, que se passe-t-il lorsque vous souhaitez encapsuler les opérations de base de données dans une fonction ?
Considérez le scénario suivant. Dans votre fonction principale, vous ouvrez une connexion à la base de données :
<code class="go">func main() { db, err := sql.Open("sqlite3", "./house.db") checkErr(err) ... }</code>
Maintenant, vous souhaitez créer une fonction qui ajoute des lignes à la base de données en fonction d'une structure transmise :
<code class="go">func addRow(row Room) error { stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)") _, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor) return err }</code>
Mais c'est là que réside le défi : la fonction addRow() n'a aucune connaissance de la variable db définie dans la fonction principale.
Comment gérer les références de connexion à la base de données
En fonction Selon la nature de votre application, vous disposez de plusieurs options pour référencer la connexion à la base de données au sein de la fonction addRow() :
<code class="go">func addRow(db *sql.DB, row Room) error</code>
<code class="go">type dbConn struct { db *sql.DB } func (conn dbConn) addRow(row Room) error</code>
Exemple d'utilisation
Montrons l'utilisation de l'approche des variables globales :
<code class="go">var db *sql.DB func main() { db, err := sql.Open("sqlite3", "./house.db") checkErr(err) // create room Room{} err = addRow(room) checkErr(err) }</code>
En déclarant db comme variable globale, elle devient accessible à la fonction addRow() n'importe où dans le programme.
Gardez à l'esprit que l'approche que vous choisissez doit être adaptée aux exigences spécifiques de votre application, son architecture et ses considérations de performances.
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!