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

DDD
Freigeben: 2024-11-01 11:43:29
Original
321 Leute haben es durchsucht

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>
Nach dem Login kopieren

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

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

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!