package dns type DomainRecordCache struct { domains map[string]RecordList fetcher Fetcher } type Fetcher func(domain string) (RecordList, error) func NewDomainRecordCache(fetcher Fetcher) *DomainRecordCache { return &DomainRecordCache{ fetcher: fetcher, domains: make(map[string]RecordList), } } func (c *DomainRecordCache) Get(domain string) (RecordList, error) { records, ok := c.domains[domain] if !ok { var err error records, err = c.fetcher(domain) if err != nil { return nil, err } c.domains[domain] = records } return records, nil }