2016-09-11 2 views
0

Я разместил все в app.go, и база данных открывается правильно, но индекс не может получить доступ к глобальной переменной. Глобальная переменная, кажется, не быть глобальным, потому что если я удалю использование Db после назначения его в InitDB я получаю ошибку «Db объявлена ​​и не используется»using mysql db for revel without gorm

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:[email protected](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) 
} 

любая помощь будет оценен по достоинству! Благодарю.

+0

Можно использовать непосредственно внутри индекса не так ли? – vinniyo

ответ

1

Вы объявляете свою переменную неправильным образом. Текущий способ, которым вы используете его, как объявление обычной переменной для области InitDB (вы используете: =).

func InitDB() { 

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

} 

Я также предлагаю создать папку внутри приложения под названием контроллеров хранить всю логику маршрута и при необходимости вызвать app.Db переменную

Это должно работать

+0

Ух .. всегда так легко и берет меня навсегда, чтобы понять. Спасибо! – vinniyo