In the example here Redigo Docs for Pool the redis pool is set as a global variable in func main. Is that a kosher way to do things? Should you really be using global varibales left and right or is there a better, more preferred way of accomplishing the same thing?
1
votes
Since the pool is designed to be used concurrently, it's not ultimately a problem. Whether you want to use it as a global is another question though: nothing is stopping you from embedding it a struct or just passing a pointer around from main().
- elithrar
True. Thanks. Also, thanks for the link to your article.
- Adergaard
1 Answers
1
votes
The only other solution have I seen, for instance in "Passing Context to Interface Methods" is:
create a
structthat accepts an embedded context and ourhandlertype, and we still satisfy thehttp.Handlerinterface thanks toServeHTTP.
In your case, the struct would include the pool, and the handler function.
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
}
}