登录
首页 >  Golang >  Go问答

引用函数内打开的数据库连接 - Golang

来源:Golang技术栈

时间:2023-04-27 22:38:42 381浏览 收藏

哈喽!今天心血来潮给大家带来了《引用函数内打开的数据库连接 - Golang》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到golang,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我的主要功能打开一个数据库连接:

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

    ...
}

然后,我想创建一个函数,允许我根据传递的结构向数据库添加一行:

func addRow(row Room) error {
    stmt, err := db.Prepare("INSERT INTO Rooms (Name, Size, WindowCount, WallDecorationType, Floor) VALUES(?, ?, ?, ?, ?)")
    _, err = stmt.Exec(row.Name , row.Size , row.WindowCount , row.WallDecorationType , row.Floor)
    return err
}

但显然我不能这样做,因为该addRow()函数不知道是什么db

我将如何使此功能起作用?我是否应该在主函数之外打开数据库?

正确答案

根据您的应用程序的工作方式,您可以

  1. 保持db 全局
  2. db作为 参数 传递 ****
  3. addRoom一个 方法

我通常为 API 服务做的是创建一个 global db,如下所示:

var db *sql.DB

func main() {
    var err error
    db, err = sql.Open("sqlite3", "./house.db")
    checkErr(err)
    // create room Room{}
    err = addRoom(room)
    checkErr(err)
}

但您也可以将 db 作为 参数 传递:

func addRow(db *sql.DB, row Room) error

或者您可以创建一个 struct 将连接保留为属性并创建addRow一个方法:

type dbConn struct {
    db *sql.DB
}

func (conn dbConn) addRow(row Room) error

这[本书](https://astaxie.gitbooks.io/build-web-application-with- golang/content/en/05.3.html)有一些很好的例子。

好了,本文到此结束,带大家了解了《引用函数内打开的数据库连接 - Golang》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>