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

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

Linda Hamilton
Linda Hamilton原創
2024-11-02 09:04:03294瀏覽

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

如何使用匯出方法建立單例資料庫實例

問題

提供的程式碼不允許在單例資料庫實例上存取方法。使用者的目標是在單例中定義方法並在其單例引用上呼叫它們。

解決方案

要使用匯出的方法建立單例資料庫實例,請按照以下修改後的程式碼操作:

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

使用此解:

  • Manager 介面定義客戶端可以存取的匯出方法。
  • 管理器結構體實作此介面。
  • 匯出的全域方法Manager 類型的變數 Mgr 使用 init() 函數進行初始化,以確保只執行一次。
  • 客戶端可以使用 Mgr 呼叫單例資料庫實例上的方法,例如 AddArticle。

異常處理

要從 gorm.Create() 捕獲並傳回異常,請修改 AddArticle 方法如下:

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

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

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