在 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(..) 捕獲並返回異常:
<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中文網其他相關文章!