(编辑以修复大写和添加上下文)
在 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/