Vin*_*ent 7 dependency-injection go
我是 Golang 的初学者,我正在开发一个小型库,该库需要在代码中的某个点为不同的子包/方法调用获取数据库连接。我只是想知道我该如何管理?
例如,如果我设法拥有一个网络服务器,它可以与处理程序一起使用,那么我如何在此函数中获得此连接?它可以与另一个进程、简单的方法调用或 MVC 模型一起使用吗?
我不想使用 global 因为对我来说这是一个不好的做法,除非它是非常特殊的方式(或以某种方式棘手)。
我在不同的网站上阅读了很多文章,但是,我仍然在询问和学习不同的意见和经验。
谢谢你的时间 !
创建一个表示资源\xe2\x80\x8b 的结构体,让我们调用 Cart. 向该结构添加 get 和 post 方法。这些方法应该是 http 处理程序。在 main 中创建带有 db 接口的结构实例。并在路由中调用 Cart.get。现在在 get 方法中您可以访问数据库接口。
\n\n不是一个有效的示例,只是为了了解注入测试的想法。
\n\ntype storage interface {\n PrepareContext(context.Context, string) (*sql.Stmt, error)\n}\n\nfunc main() {\n db, _ := sql.Open("mysql", `queryString`)\n http.HandleFunc("/", Cart{db}.get)\n http.ListenAndServe(":8080", nil)\n}\n\ntype Cart struct {\n storage\n}\n\nfunc (crt Cart) get(w http.ResponseWriter, r *http.Request) {\n q, _ := crt.PrepareContext(context.Background(), `select *`)\n fmt.Println(q.Exec())\n}\n\n/////////Test\ntype testDB struct{}\n\nfunc (c testDB) PrepareContext(context.Context, string) (*sql.Stmt, error) {\n return nil, nil\n}\nfunc TestGet(t *testing.T) {\n db := testDB{}\n _ = Cart{db}\n\n //http test here\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
6754 次 |
最近记录: |