EDITED已解决:如何在GoLang中创建单例DBManager类。如何在GoLang中创建单例DB类
我介绍了几个如何创建单身人士的代码示例,但我希望有这些方法,并在他们的单身人士参考调用他们。我的代码如下
package dbprovider
import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/sqlite"
"rest/article"
"log"
)
type DBOperations interface {
AddArticle(article *article.Article)
}
type DBManager struct {
db *gorm.DB
isInitialized bool
}
var dbManagerInstance = new()
func GetDBManager() DBManager {
return dbManagerInstance
}
func new() DBManager {
localDbRef, err := gorm.Open("sqlite3", "../articles.db")
if (err != nil) {
panic("Error initializing db")
} else {
log.Print("DB Initialized successfully")
}
return DBManager{db:localDbRef, isInitialized:true}
}
func (dbManager DBManager) AddArticle(article article.Article) (err error) {
if (dbManager.isInitialized) {
tx := dbManager.db.Begin()
//dbManager.db.NewRecord(article)
//dbManager.db.Commit()
tx.NewRecord(article)
tx.Commit()
errs := dbManager.db.GetErrors()
if (len(errs) > 0) {
err = errs[0]
} else {
log.Print("No error in this transactions")
}
}
return
}
有了新的答案我已经更新了这个问题,包括回答。但我有几个疑问。创建(..)
从那里这个init方法越来越叫什么名字? – sector11
@ sector11包'init()'函数在运行时自动执行一次,然后才能引用包中的任何内容。见编辑的答案。 – icza
获取不能使用localDbRef(类型* gorm.DB)作为字段值中的类型gorm.DB – sector11