gpt4 book ai didi

go - 在 Golang 中进行依赖注入(inject)的最佳方式是什么

转载 作者:IT王子 更新时间:2023-10-29 00:46:00 24 4
gpt4 key购买 nike

我是 Golang 的初学者,我正在开发一个小型库,该库需要在代码中的某个时刻为不同的子包/方法调用获取数据库连接。我只是想知道如何管理这个?

例如,如果我设法拥有一个网络服务器,它与处理程序一起工作,那么我如何才能在这个函数中获得这个连接?它可以与另一个进程、简单方法调用或 MVC 模型一起使用?

我不想使用全局,因为对我来说这是一个不好的做法,除非它是非常特殊的方式(或以某种方式棘手)。

我在不同的网站上阅读了很多文章,但我仍然在询问和学习不同的意见和经验。

感谢您的宝贵时间!

最佳答案

创建一个代表资源的结构体 ,让我们调用 Cart。向该结构添加 get 和 post 方法。这些方法应该是 http 处理程序。在 main 中创建一个带有 db 接口(interface)的结构实例。并在路由中调用 Cart.get。现在在 get 方法中,您可以访问 db 接口(interface)。

这不是一个工作示例,只是为了了解注入(inject)测试的想法。

type storage interface {
PrepareContext(context.Context, string) (*sql.Stmt, error)
}

func main() {
db, _ := sql.Open("mysql", `queryString`)
http.HandleFunc("/", Cart{db}.get)
http.ListenAndServe(":8080", nil)
}

type Cart struct {
storage
}

func (crt Cart) get(w http.ResponseWriter, r *http.Request) {
q, _ := crt.PrepareContext(context.Background(), `select *`)
fmt.Println(q.Exec())
}

/////////Test
type testDB struct{}

func (c testDB) PrepareContext(context.Context, string) (*sql.Stmt, error) {
return nil, nil
}
func TestGet(t *testing.T) {
db := testDB{}
_ = Cart{db}

//http test here
}

关于go - 在 Golang 中进行依赖注入(inject)的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46141898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com