我想WithContext
为 struct 编写一个方法,并从net/http
's中获取灵感Request.WithContext
。
Request.WithContext
我的问题是:如果上下文为零,为什么会恐慌:
func (r *Request) WithContext(ctx context.Context) *Request {
if ctx == nil {
panic("nil context")
}
...
}
我也应该这样吗?
有关我为什么要创建WithContext
方法的更多上下文:我正在实现一个接口,该接口在其签名中不提供上下文参数,但相信实现需要它。
更具体地说,我正在编写一个 Redis 后端,用于gorilla/session
使用Go 的官方 Redis 客户端,其中Get
andSet
方法采用context.Context
。
这个想法是,我的 redis 存储将在需要时使用新的上下文对象进行浅拷贝,然后使用:
type redisStore struct {
codecs []securecookie.Codec
backend Backend // custom interface for Redis client
options *sessions.Options
ctx context.Context
}
func (s *redisStore) WithContext(ctx context.Context) *redisStore {
if ctx == nil {
panic("nil context")
}
s2 := new(redisStore)
*s2 = *s
s2.ctx = ctx
return s2
}
// Backend
type Backend interface {
Set(context.Context, string, interface{}) error
Get(context.Context, string) (string, error)
Del(context.Context, string) error
}