首頁  >  文章  >  後端開發  >  如何使用 Go 中的方法建立單例資料庫實例?

如何使用 Go 中的方法建立單例資料庫實例?

DDD
DDD原創
2024-11-01 11:43:29313瀏覽

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

帶有方法的單例資料庫實例

在 Go 中使用方法建立單例可以透過利用未匯出的實作類型和匯出的介面來實現。

使用接口和包初始化

使用所需的方法定義導出的接口,例如as:

<code class="go">package dbprovider

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

創建一個實現接口的未導出類型:

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

在包初始化函數中初始化單例實例,該函數在任何包引用之前執行一次:

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

使用單例

使用單例實例參考導出的介面變量,例如:

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

gorm.Create(..) 中的異常處理

捕獲並返回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>

替代方法

除了使用套件初始化函數之外,您還可以初始化明確單例:

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

這種方法允許使用者決定是使用共享實例還是建立一個新實例,例如用於測試目的。

以上是如何使用 Go 中的方法建立單例資料庫實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn