

現在Goで[RediStore](http://godoc.org/gopkg.in/boj/redistore.v1#RediStore.Get)というOSSを使用しています。そのインスタンスである*RediStoreをグローバル変数としてmain関数内で以下のとおり初期化しました。

[code]

    ///main関数ない
    ///var store *rediStore.RediStore//グローバル変数として宣言
        store, err = redistore.NewRediStore(20, "tcp", ":6379", "", []byte("session-key"))
    
        if store == nil {
          //ここはnilでない
            panic("store is nil")
        }
        if err != nil {
          //エラーもない
            panic(err)
        }
        defer store.Close()
        store.SetMaxAge(259200)
    
[/code]

そして、user_handlerというhandler内でGetSessionを呼び出すことで下記の通りそのインスタンスを参照しました。しかし、ここで参照したstoreがnilになってしまいます。main関数内でエラーがでていないので初期化は完了しているはずだと考えたのですがなぜでしょうか

[code]

    func GetSession(c *echo.Context) *sessions.Session {
        if c.Request() == nil {
            panic("c is nil")
        }
        if store == nil {
          //nilになっている
            panic("store is nil")
        }
        session, err := store.Get(c.Request(), KeySession)
        if err != nil {
            panic(err)
        }
        return session
    }
    
[/code]

エラーは以下のようなものがでました。

[code]

    invalid memory address or nil pointer dereference
    
[/code]

これは自分でデバッグ用のコードを入れる前のエラーです。


CC BY-SA 3.0
2015-08-24T00:42:53.340
14764
2015-08-25T12:35:45.313
2015-08-25T12:35:45.313
49
7232
question
go redis
main関数で初期化したものをhandlerで参照するとnilになる。