我正在尝试创建一个全局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
。