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

Comment créer une instance de base de données Singleton avec des méthodes en Go ?

DDD
Libérer: 2024-11-01 11:43:29
original
321 Les gens l'ont consulté

How to Create a Singleton DB Instance with Methods in Go?

Instance de base de données Singleton avec méthodes

La création d'un singleton avec des méthodes dans Go peut être réalisée en utilisant un type d'implémentation non exporté et une interface exportée.

Utilisation d'une interface et initialisation d'un package

Définissez une interface exportée avec les méthodes souhaitées, telles que :

<code class="go">package dbprovider

type Manager interface {
    AddArticle(article *article.Article) error
}</code>
Copier après la connexion

Créez un type non exporté qui implémente l'interface :

<code class="go">type manager struct {
    db *gorm.DB
}</code>
Copier après la connexion

Initialisez l'instance singleton dans une fonction d'initialisation de package, qui s'exécute une fois avant toute référence de package :

<code class="go">var Mgr Manager

func init() {
    db, err := gorm.Open("sqlite3", "../articles.db")
    if err != nil {
        log.Fatal("Failed to init db:", err)
    }
    Mgr = &manager{db: db}
}</code>
Copier après la connexion

Utilisation du Singleton

Utilisez l'instance singleton en vous référant à la variable d'interface exportée, par exemple. :

<code class="go">if err := dbprovider.Mgr.AddArticle(someArticle); err != nil {
    // Handle error
}</code>
Copier après la connexion

Gestion des exceptions dans gorm.Create(..)

Pour intercepter et renvoyer les exceptions de gorm.Create(..):

<code class="go">func (mgr *manager) AddArticle(article *article.Article) (err error) {
    mgr.db.Create(article)
    if errs := mgr.db.GetErrors(); len(errs) > 0 {
        err = errs[0]
    }
    return
}</code>
Copier après la connexion

Alternative Approches

Au lieu d'utiliser une fonction d'initialisation du package, vous pouvez également initialiser explicitement le singleton :

<code class="go">var mgr = newManager()

func newManager() Manager {
    db, err := gorm.Open("sqlite3", "../articles.db")
    if err != nil {
        log.Fatal("Failed to init db:", err)
    }
    return &manager{db: db}
}</code>
Copier après la connexion

Cette approche permet aux utilisateurs de décider d'utiliser l'instance partagée ou d'en créer une nouvelle, par ex. à des fins de test.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!