使用mysql db for revel而不用gorm

时间:2016-09-11 00:30:27

标签: mysql go revel

我已将所有内容放入app.go并且数据库正确打开但Index无法访问全局变量。全局变量似乎不是全局的,因为如果我在InitDB中分配它后删除了Db的使用,我得到错误" Db声明并且未使用"

package controllers

import (
    "database/sql"
    "fmt"

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

var Db *sql.DB

type App struct {
    *revel.Controller
}

func (c App) Index() revel.Result {
    if c.Params.Get("id") == "3012" {

        return c.Redirect("http://youtube.com")
    }
    fmt.Println("here is the db from index:", Db)
    return c.Render()
}

func InitDB() {

    // open db
    Db, err := sql.Open("mysql", "username:xxxxxxx@tcp(xxxxxxx:3306)/xxxx")
    if err != nil {
        revel.INFO.Println("DB Error", err)
    }
    revel.INFO.Println("DB Connected")
    //fmt.Println(Db)

}

func init() {
    revel.OnAppStart(InitDB)
}

任何帮助将不胜感激!谢谢。

1 个答案:

答案 0 :(得分:1)

您以错误的方式声明您的变量。当前使用它的方式就像为InitDB范围声明一个普通变量一样(你正在使用:=)。

func InitDB() {

    var err error
    Db, err = sql.Open("mysql", "username:xxxxxxx@tcp(xxxxxxx:3306)/xxxx")
    if err != nil {
        revel.INFO.Println("DB Error", err)
    }
    revel.INFO.Println("DB Connected")
    //fmt.Println(Db)

}

我还建议在app中创建一个名为controllers的文件夹,用于存储所有路由逻辑,如果需要,还可以调用app.Db变量

这应该有效