gpt4 book ai didi

go - 将数据库连接存储在全局变量中

转载 作者:IT老高 更新时间:2023-10-28 13:05:33 27 4
gpt4 key购买 nike

我正在使用此处提供的 Golang 的 MySQL 驱动程序

https://github.com/go-sql-driver/mysql

我正在尝试做的一件事是将数据库变量存储在全局连接中。根据文档, sql.Open() 应该返回一个指向数据库结构的指针,所以我尝试将它存储为

var db *DB

但是,这导致了错误

undefined: DB

接下来我尝试查看 MySQL 驱动程序的源代码,我在这里找到了一段代码 https://github.com/go-sql-driver/mysql/blob/master/driver.go

func (d MySQLDriver) Open(dsn string) (driver.Conn, error) {

所以,我尝试将变量保存为 driver.Conn - 但是,我无法(不正确的导入)。我也无法导入驱动程序。

我尝试的最后一件事是使用反射来显示变量的名称

package main

import (
"fmt"
"reflect"
)

import "database/sql"
import _ "github.com/go-sql-driver/mysql"

func main() {
db, _ := sql.Open("mysql", "root:password@/Tracker")
yt := reflect.TypeOf(db).Kind()
fmt.Printf("%T: %s\n", yt, yt)
}

不幸的是,这也不起作用 - 它显示为指针,而不是它实际指向的变量类型。

我现在不知道如何弄清楚。提前感谢您的帮助!

最佳答案

您需要使用包名来限定类型的名称:

import(
"database/sql"
"github.com/go-sql-driver/mysql"
)

var db *sql.DB // Note the sql package provides the namespace

func main() {
var err error
// Make sure not to shadow your global - just assign with = - don't initialise a new variable and assign with :=
db, err = sql.Open(...)
if err != nil {
// Handle the error!
}

}

您是想要全局(易于上手)还是明确地传递它取决于您,但我建议您暂时保持简单。如果这是进入 Web 应用程序,您可以在处理程序/请求之间安全地共享 *sql.DB 连接池。

关于go - 将数据库连接存储在全局变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29462940/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com