1

Redigo Docs for Pool的示例中,redis 池在 func main 中设置为全局变量。这是一种犹太的做事方式吗?你真的应该使用左右全局变量,还是有更好、更首选的方式来完成同样的事情?

4

1 回答 1

1

我见过的唯一其他解决方案,例如在“将上下文传递给接口方法”中是:

创建一个struct接受嵌入式上下文和我们的handler类型的,并且http.Handler由于ServeHTTP.

在您的情况下,struct将包括pool, 和handler函数。

type appContext struct {
    pool Pool
}

type appHandler struct {
    *appContext
    h func(a *appContext, w http.ResponseWriter, r *http.Request) (int, error)
}

func (ah appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
   ...
}


func main() {
    context := &appContext{
        pool:    ...,
        // any other data
    }
}
于 2014-07-26T14:00:21.360 回答