cndjp / qicoo-api

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

redis変数はやっぱりグローバル変数にする必要ない気がします。

nnao45 opened this issue · comments

Go勉強会でお話しした内容なのですが、

var redisPool *redis.Pool

qicoo-api内でこのredisPool変数をグローバル変数で定義する必要性について考えてみましたが、
恐らくグローバルで定義する必要はないと思います。

[理由]

redigoパッケージにおける*redis.Poolは見ての通り、redis.Pool型のポインタです。
事の焦点は、「変数redisPoolをTCPコネクションがリスタートする度に作り直すかどうか」という所で、多分その答えは「作り直さない」でしょう。

なぜならですね、以下のqicoo-api内ではmain関数の中の以下の関数でしかredisPoolに代入してません。

func initRedisPool()

仮に例えばこれが構造体でAPIリクエストのたびに呼ばれてインスタンスを再生成しているのであれば、グローバル変数にしておく価値はあるかもしれませんが実際はmain関数はmuxルータが起動したらmuxのルーティングで無限ループするだけです。

[対応策]

1.普通にmain関数内で変数を定義する
2.構造体としてredisPoolを定義して、モジュールとして関連する関数を定義する。

redisPoolを使いまわすのであれば2がいいかもしれません。

これはリファクタリングした後にまた議題に出しますね。