bug记录::= 给全局变量赋值导致出现panic
InitRedis
方法里这一行:
rc, err := redisFactory.New()
会导致你虽然声明了一个包级变量 rc
:
var rc *redis.RedisClient
但在 InitRedis
函数内部,因为前面加了 :=
,这里的 rc
是一个"新的局部变量",而不会把你全局的 rc
赋值。所以你在外面 rc 一直为 nil。
这会导致调用 checkRateLimited
或 LoadMysqlDataToRedis
时 redis 实际上是未初始化的,每次都会再次进 InitRedis
,而且 rc 其实全程为 nil。
你应该这样写:
var err error
rc, err = redisFactory.New()
直接给全局变量赋值,不要用 :=
,要用 =
。
修改后完整的那几行:
rc, err = redisFactory.New()if err != nil {// ...}
总结
- 不要用 := 给全局变量赋值!
- 函数内部如果想设置全局变量,要用
=
。
你还可以加一行确保设置没问题
fmt.Printf("全局rc地址: %p\n", rc)
在每次用 rc 前打一下这个,看看是不是同一个 rc。