Heim >Backend-Entwicklung >Golang >Wie erstelle ich eine Singleton-DB-Instanz mit Methoden in Go?

Wie erstelle ich eine Singleton-DB-Instanz mit Methoden in Go?

DDD
DDDOriginal
2024-11-01 11:43:29391Durchsuche

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

Singleton-DB-Instanz mit Methoden

Das Erstellen eines Singletons mit Methoden in Go kann durch die Verwendung eines nicht exportierten Implementierungstyps und einer exportierten Schnittstelle erreicht werden.

Verwenden einer Schnittstelle und Paketinitialisierung

Definieren Sie eine exportierte Schnittstelle mit den gewünschten Methoden, wie zum Beispiel:

<code class="go">package dbprovider

type Manager interface {
    AddArticle(article *article.Article) error
}</code>

Erstellen Sie einen nicht exportierten Typ, der die Schnittstelle implementiert:

<code class="go">type manager struct {
    db *gorm.DB
}</code>

Initialisieren Sie die Singleton-Instanz in einer Paketinitialisierungsfunktion, die einmal vor allen Paketreferenzen ausgeführt wird:

<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>

Verwenden des Singleton

Verwenden Sie die Singleton-Instanz, indem Sie auf die exportierte Schnittstellenvariable verweisen, z. B. :

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

Ausnahmebehandlung in gorm.Create(..)

Um Ausnahmen von gorm.Create(..) abzufangen und zurückzugeben:

<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>

Alternative Ansätze

Anstatt eine Paketinitialisierungsfunktion zu verwenden, können Sie den Singleton auch explizit initialisieren:

<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>

Mit diesem Ansatz können Benutzer entscheiden, ob sie die gemeinsam genutzte Instanz verwenden oder eine neue erstellen möchten. z.B. zu Testzwecken.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Singleton-DB-Instanz mit Methoden in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn