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

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

Linda Hamilton
發布: 2024-11-02 09:04:03
原創
302 人瀏覽過

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

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