我正在编写一个go模块,用于将一些自定义度量存储到数据存储中。数据的性质使得redis非常理想,但是在需要更改时使用接口是有意义的。我有以下代码:
type MetricsStore interface {
Put(metric string) (string, error)
Get(id string) (string, error)
}
然后我有一个包含redis客户机和 New()
函数,该函数创建结构的示例,并使用传递到函数中的参数示例化redis客户机。
type MetricsRedisCache struct {
c *redis.Client
}
func New(address string, password string, db int) (MetricsRedisCache) {
options := &redis.Options{
Addr: address,
Password: password,
DB: db,
}
return RedisUrlStore{client: redis.NewClient(options)}
}
metricsrediscache然后实现metricsstore接口上定义的函数。问题是自从 New()
函数创建redis客户机并在 MetricsRedisCache
struct,我无法轻松创建一个模拟客户机,以便在为 Put()
以及 Get()
需要 MetricsRedisCache
通过接收器。
1条答案
按热度按时间s71maibg1#
创建新构造函数,
NewWithClient
或者一些类似的将客户机作为参数而不是创建它。然后返回一个MetricsRedisCache
使用给定的客户端。您可以在测试中使用此构造函数来练习MetricsRedisCache
使用模拟redis客户端。