您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何跨包中的文件使用全局变量?

如何跨包中的文件使用全局变量?

问题是您使用了Short变量声明,:=并且只是将创建的*DB值存储在本地变量中,而不是全局变量中。

这行:

db, err := NewDB(dbinfo)

创建2个局部变量:dberr,并且该局部变量db与全局db变量无关。您的全局变量将保留nil。您必须将创建*DB的变量分配给全局变量。不要使用简短的变量声明,而要使用简单的赋值,例如:

var err error
db, err = NewDB(dbinfo)
if err != nil {
    log.Fatal(err)
}

原始答案如下。

这是一种指针类型,使用前必须对其进行初始化。指针类型的零值为nil

您不必导出它(这就是以大写字母开头的内容)。请注意,只要文件属于同一个程序包,就可以有多个文件,它们可以访问彼此定义的标识符。

一个好的解决方案是在init()自动调用的package 函数中执行此操作。

请注意,这sql.Open()可能只验证其参数而不创建与数据库的连接。要验证数据源名称是否有效,请调用DB.Ping()

例如:

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open("yourdrivername", "somesource")
    if err != nil {
        log.Fatal(err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal(err)
    }
}
其他 2022/1/1 18:15:11 有494人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶