首頁 > 後端開發 > Golang > 主體

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

DDD
發布: 2024-11-01 11:43:29
原創
321 人瀏覽過

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

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

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

使用接口和包初始化

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

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!