Reputation: 810
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?
Upvotes: 1
Views: 1277
Reputation: 1323683
The only other solution have I seen, for instance in "Passing Context to Interface Methods" is:
create a
struct
that accepts an embedded context and ourhandler
type, and we still satisfy thehttp.Handler
interface 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
}
}
Upvotes: 1