main関数で初期化したものをhandlerで参照するとnilになる。
現在GoでRediStoreというOSSを使用しています。そのインスタンスである*RediStoreをグローバル変数としてmain関数内で以下のとおり初期化しました。
///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)
そして、user_handlerというhandler内でGetSessionを呼び出すことで下記の通りそのインスタンスを参照しました。しかし、ここで参照したstoreがnilになってしまいます。main関数内でエラーがでていないので初期化は完了しているはずだと考えたのですがなぜでしょうか
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
}
エラーは以下のようなものがでました。
invalid memory address or nil pointer dereference
これは自分でデバッグ用のコードを入れる前のエラーです。