mysql - global var out out init.go in revel

标签 mysql go revel

(编辑以修复大写和添加上下文)

在 revel 的 init.go 中,我有一个全局变量:DB。

package app

import (
 "database/sql"
 "fmt"

 _ "github.com/go-sql-driver/mysql"
 "github.com/revel/revel"
)
var DB *sql.DB

func InitDB() {

 connstring := fmt.Sprintf("revel:revel@tcp(localhost:3336)/revel")

 var err error
 DB, err = sql.Open("mysql", connstring)
 if err != nil {
    revel.INFO.Println("DB Error", err)
 }

}

如何在应用程序的其余部分获取该数据库变量?具体来说,我打算在模型中使用这个变量。

首先,我如何让它在这个 Controller 中工作? Controller /app.go

package controller

func (c App) Index() revel.Result {
 rows, err := app.DB.Exec("SELECT * FROM test_table")
 //do something with rows
 return c.Render()
}

最佳答案

Revel 让您“滚动您自己的数据库”,因此由您决定在何处建立连接以及如何实现它们。

您的 InitDB() 函数必须设置一个public 变量,例如DB(意思是它的名字是大写的),然后您将通过它所在的包访问它。

所以请注意您的 app/init.go 位于 package app 中:

package app

var DB *sql.DB

func InitDB() { DB = .... }

在 Go 中,当您的应用程序运行时,每个包都充当一种“单例”,因此您可以访问应用程序中的其他任何地方:

app.DB

这将在 app 包中查找名为 DB 的变量。如果您已经运行 InitDB() 连接到数据库,则 app.DB 将允许所有其他包使用该数据库。

关于mysql - global var out out init.go in revel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35834645/

相关文章:

web - Revel 框架缓存静态文件?

go - 为什么 Revel JSON 响应中的所有键都不大写?

mysql - Node JS和mysql连接不上(客户端不支持服务端请求的认证协议(protocol),考虑升级mysql客户端)

iphone - 如何将数据库数据发送到MySQL服务器以更新服务器数据库

rest - 试图将字符串转换为实例变量

go - 将结构的字段 slice 为可变参数

string - 检查多个字符串是否为空的优雅方法

php - php中不区分大小写的查询

php - mysql表绑定(bind)下一行和当前行

programming-languages - 我应该将 Go 用于什么样的项目?