У меня есть этот интерфейс для объекта кэша, который отражает кэш lru
из github.com/hashicorp/golang-lru
:
type Cacher interface {
Add(key, value interface{})
Get(key interface{}) (value interface{}, ok bool)
}
В main.go
Я создаю объект, когда выполняются некоторые условия, в противном случае он остается нулевым :
import lru "github.com/hashicorp/golang-lru"
...
var cache *lru.ARCCache
if someCondition {
cache, _ = lru.NewARC(int(cacheSize))
}
... later on
r.Cache = cache
Теперь в другом пакете я проверяю, равен ли кэш нулю, прежде чем выполнять какие-либо операции с ним:
if r.Cache != nil {
v, found := r.Cache.Get(...)
}
Это приводит к ошибке invalid memory address or nil pointer dereference
потому что тип не ноль, а значение.
Мой вопрос заключается в том, как проверить, равен ли r.Cache
ноль, без необходимости импортировать github.com/hashicorp/golang-lru
в этот пакет (что делает использование Cacher
интерфейс бессмысленный): if r.Cache != (*lru.ARCCache)(nil)