我在这里提供了Golang的MySQL驱动程序
https://github.com/go-sql-driver/mysql
我要做的其中一件事是将数据库变量存储在全局连接中。根据文档,sql.Open()应该返回一个指向DB结构的指针,所以我尝试将其存储为
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)
}
不幸的是,这也不起作用 - 它显示为指针,而不是它实际指向的变量类型。
我现在不知道如何解决这个问题。在此先感谢您的帮助!
答案 0 :(得分:25)
您需要使用包名称限定类型的名称:
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
连接池。