Go实战全家桶之二: GO依赖注入框架godi之一,实现BEAN工厂,创建单例或者多实例
package main
import (
"fmt"
"github.com/globalsign/mgo"
"github.com/smallnest/godi"
)
// 定义一个接口,用于数据库操作
type DBOperations interface {
Insert(data interface{}) error
Find(query interface{}, result interface{}) error
}
// 实现DBOperations接口的MongoDB结构体
type MongoDB struct {
session *mgo.Session
}
// 实现DBOperations接口的方法
func (m *MongoDB) Insert(data interface{}) error {
// 省略实现细节
return nil
}
func (m *MongoDB) Find(query interface{}, result interface{}) error {
// 省略实现细节
return nil
}
// 创建一个工厂方法,用于创建MongoDB实例
func NewMongoDB(session *mgo.Session) DBOperations {
return &MongoDB{session: session}
}
func main() {
// 创建godi容器
container := godi.NewContainer()
defer container.Invoke(func(session *mgo.Session) {
session.Close()
})
// 定义MongoDB的Bean,设置单例
container.AddBean(NewMongoDB).Singleton()
// 从容器中获取MongoDB实例
var db DBOperations
err := container.Invoke(func(db DBOperations) {
db = db
})
if err != nil {
panic(err)
}
// 使用MongoDB实例进行操作
err = db.Insert("some data")
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println("MongoDB instance created and used successfully.")
}
这段代码首先定义了一个接口DBOperations
,然后实现了这个接口的MongoDB
结构体和工厂方法NewMongoDB
。在main
函数中,它创建了一个godi容器,并通过AddBean
方法添加了MongoDB
的Bean定义,并设置为单例。之后,它从容器中获取了MongoDB
的实例并使用它进行了插入操作。最后,它关闭了mgo.Session
以释放资源。这个例子展示了如何在Go中使用依赖注入框架godi来管理和使用数据库操作实例。
评论已关闭