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