Sql.Open全局连接的最佳方法



我正在尝试创建一个全局DB sql。打开多个.go包之间的连接。这样做可以让我只输入一次数据库连接,而不是在不同的文件之间多次输入。

到目前为止,我已经创建了这个文件:

import (
"database/sql"
)
var DB *sql.DB
func ConnectDB() {
db, _ := sql.Open("mysql", "user:password@(localhost:port)/db")
DB = db
}

我正在将我的连接分配给全局变量DB。我知道我可以使用DB.query或其他软件包。数据库。我可以通过不使用:=来避免DB=DB,并执行:=将一个新变量分配到函数的作用域:

var db *sql.DB
func ConnectDB() {
var err error
db, err = sql.Open(.....)
.....
}

我的其他文件如下所示:

func TestNew() {
fmt.Println("Test for MySQL")
db, _ := sql.Open(
"mysql", "user:password@(localhost:port)/db")
Delete, err := db.Query("DELETE * FROM table1 WHERE id = ?;", id)
if err != nil {
panic(err.Error())
}
defer Delete.Close()
}

我不想进入包中的每个单独的文件并更改DB凭据10x。我想使用函数ConnectDB,并将其作为控制其他包使用何种DB/凭据的文件。

一种常见的方法是初始化main中的连接,并将其传递给所有需要它的函数。

另一种方法是使用main以外的包,并在其中设置一个包级别变量:

package db
var DB *sql.DB
func InitDB(dbURL string) {
var err error
DB, err=sql.Open(dbURL)
if err!=nil {
panic(err)
}
}

使用DB URL从main调用InitDB。当您需要数据库连接时,您可以导入数据库包,并将该连接用作db.DB

相关内容

最新更新