Heim > Artikel > Backend-Entwicklung > Wie erstelle ich eine Singleton-DB-Instanz mit Methoden in Go?
Das Erstellen eines Singletons mit Methoden in Go kann durch die Verwendung eines nicht exportierten Implementierungstyps und einer exportierten Schnittstelle erreicht werden.
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 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>
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>
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!