首页 > 后端开发 > Golang > 正文

如何从 Golang 函数内访问数据库连接?

Barbara Streisand
发布: 2024-10-28 23:02:30
原创
875 人浏览过

How to Access a Database Connection from Within a Function in Golang?

从 Golang 中的函数内访问数据库连接

在 Golang 中,数据库操作通常从打开到数据库的连接开始。但是,在使用需要数据库交互的函数时,通常需要引用打开的连接。

问题:

考虑以下场景:

<code class="go">func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    addRow(Room{
        Name: "Bedroom",
        Size: 12.5,
        ...
    })
}</code>
登录后复制

在这个例子中,main函数打开一个数据库连接,用db表示。但是,addRow 函数无法直接访问 db,因为它是在 main 函数之外定义的。

解决方案:

有几种方法可以处理这种情况:

全局访问:

通过在任何函数外部声明 db 变量使其成为全局变量,例如:

<code class="go">var db *sql.DB

func main() {
    db, err := sql.Open("sqlite3", "./house.db")
    checkErr(err)

    addRow(Room{
        Name: "Bedroom",
        Size: 12.5,
        ...
    })
}</code>
登录后复制

此方法允许内部的所有函数访问 db 变量的相同包。但是,不建议长时间运行的应用程序使用全局变量,因为全局变量可能会导致资源泄漏和意外行为。

参数传递:

将 db 变量作为参数传递添加行函数:

<code class="go">func addRow(db *sql.DB, row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (...)")
    ...
    return nil
}</code>
登录后复制

此方法提供了对数据库连接范围的更多控制,并允许更好的依赖注入。

Struct 方法:

另一种选择是将 addRow 定义为存储数据库连接的结构体的方法:

<code class="go">type Database struct {
    db *sql.DB
}

func (db *Database) AddRow(row Room) error {
    stmt, err := db.db.Prepare("INSERT INTO Rooms (...)")
    ...
    return nil
}</code>
登录后复制

这种方法封装了数据库连接并提供了一种更结构化的访问它的方式。

以上是如何从 Golang 函数内访问数据库连接?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板