Вот мой код:
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()
? И что будет смотреть программирование с интерфейсами, когда я установлю конкретный тип интерфейса и затем вызову его методами?