Как назначить структуру для интерфейса - PullRequest
0 голосов
/ 28 июня 2018

Вот мой код:

type ICacheEngine interface {
   // ...
}

// implements all methods of ICacheEngine
type RedisCache struct { }

type ApplicationCache struct { 
  Cache *ICacheEngine
}

func NewRedisCache() *ApplicationCache {
    appCache := new(ApplicationCache)
    redisCache := new(RedisCache)
    appCache.Cache = redisCache   // here is an error : can not use *RedisCache as *ICacheEngine
    return appCache
}

RedisCache реализует все методы ICacheEngine. Я могу передать RedisCache методу, который получит ICacheEngine:

func test(something ICacheEngine) *ICacheEngine {
    return &something
}

....

appCache.Cache = test(redisCache)

Но я не могу присвоить RedisCache ICacheEngine. Зачем ? Как я могу избежать функции test()? И что будет смотреть программирование с интерфейсами, когда я установлю конкретный тип интерфейса и затем вызову его методами?

1 Ответ

0 голосов
/ 28 июня 2018

Учитывая, что интерфейс может хранить указатель на структуру stuct или , убедитесь, что ваша структура ApplicationCache определена как:

type ApplicationCache struct { 
  Cache ICacheEngine
}

См. " Приведение структурного указателя к указателю на интерфейс в Golang ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...