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

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 09:04:03294Durchsuche

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

So erstellen Sie eine Singleton-DB-Instanz mit exportierten Methoden

Problem

Der bereitgestellte Code ermöglicht keinen Zugriff auf Methoden auf der Singleton-DB-Instanz . Benutzer möchten Methoden im Singleton definieren und sie in ihrer Singleton-Referenz aufrufen.

Lösung

Um eine Singleton-DB-Instanz mit exportierten Methoden zu erstellen, folgen Sie diesem geänderten Code:

<code class="go">package dbprovider

import (
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/sqlite"
    "rest/article"
    "log"
)

type Manager interface {
    AddArticle(article *article.Article) error
    // Add other methods
}

type manager struct {
    db *gorm.DB
}

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

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>

Verwendung dieser Lösung:

  • Die Manager-Schnittstelle definiert die exportierten Methoden, auf die Clients zugreifen können.
  • Die Manager-Struktur implementiert die Schnittstelle.
  • Eine exportierte globale Variable Mgr vom Typ Manager wird mit einer init()-Funktion initialisiert, um sicherzustellen, dass dies nur einmal erfolgt.
  • Clients können Mgr verwenden, um Methoden auf der Singleton-DB-Instanz aufzurufen, wie z. B. AddArticle.

Ausnahmebehandlung

Um Ausnahmen von gorm.Create() abzufangen und zurückzugeben, ändern Sie die AddArticle-Methode wie folgt:

<code class="go">func (mgr *manager) AddArticle(article *article.Article) (err error) {
    if err := mgr.db.Create(article).Error; err != nil {
        return err
    }
    
    if errs := mgr.db.GetErrors(); len(errs) > 0 {
        return errs[0]
    }

    return nil
}</code>

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Singleton-DB-Instanz mit exportierten 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