提问人:Ran Yanay 提问时间:11/15/2023 最后编辑:kostixRan Yanay 更新时间:11/15/2023 访问量:69
指向变量的指针不能用作指向接口的指针
Pointer to a variable cannot be used as a pointer to an interface
问:
我正在用 Go 编写一个与 Redis 通信的模块。 为了编写单元测试,我希望能够将模拟的 redis 注入到模块中。 在生产中,我想将真正的Redis发送到模块ctor。 在单元测试中,我想将模拟的 Redis 发送到模块 ctor。
这就是我尝试这样做的方式:
package redis
import "time"
type IStore interface {
Get(key string) (string, error)
MGet(keys []string) ([]interface{}, error)
Set(key string, val interface{}, expiration time.Duration) error
MSet(values map[string]string) error
Delete(keys []string) error
DeleteByPrefix(prefix string) error
Keys(prefix string) ([]string, error)
}
package redis
import (
"context"
"github.com/go-redis/redis/v8"
"time"
)
type Store struct {
prefix string
clusterClient *redis.ClusterClient
client *redis.Client
}
func New(prefix string) *Store {
.
.
.
.
package redis
import (
"errors"
"strings"
"time"
)
type StoreMock struct {
Prefix string
Client map[string]interface{}
}
func NewStoreMock(prefix string) *StoreMock {
.
.
.
所以我有实现此接口的 store 和 StoreMock。
我的MW代码的那部分:
type Middleware struct {
redis *redis.IStore
}
type MiddlewareOptions struct {
Redis *redis.IStore
}
func InitMiddleware(options rMiddlewareOptions) *Middleware {
return &FreeTierMiddleware{
redis: options.Redis,
}
}
从主要 IM 尝试这样做:
redis22 := redis.New("")
options := middlewares.MiddlewareOptions{
Redis: redis22,
}
mww := middlewares.InitMiddleware(options)
但我得到:Cannot use 'redis22' (type *Store) as the type *redis.IStore
我做错了什么?
字段保持接口,并使用其中一个实现设置字段
答: 暂无答案
评论
redis.IStore
*redis.IStore
int
*redis.IStore
*