Dnscache
DNS lookup cache for Go
Install / Use
/learn @rs/DnscacheREADME
DNS Lookup Cache
The dnscache package provides a DNS cache layer to Go's net.Resolver.
Install
Install using the "go get" command:
go get -u github.com/rs/dnscache
Usage
Create a new instance and use it in place of net.Resolver. New names will be cached. Call the Refresh method at regular interval to update cached entries and cleanup unused ones.
resolver := &dnscache.Resolver{}
// First call will cache the result
addrs, err := resolver.LookupHost(context.Background(), "example.com")
// Subsequent calls will use the cached result
addrs, err = resolver.LookupHost(context.Background(), "example.com")
// Call to refresh will refresh names in cache. If you pass true, it will also
// remove cached names not looked up since the last call to Refresh. It is a good idea
// to call this method on a regular interval.
go func() {
t := time.NewTicker(5 * time.Minute)
defer t.Stop()
for range t.C {
resolver.Refresh(true)
}
}()
If you are using an http.Transport, you can use this cache by specifying a DialContext function:
r := &dnscache.Resolver{}
t := &http.Transport{
DialContext: func(ctx context.Context, network string, addr string) (conn net.Conn, err error) {
host, port, err := net.SplitHostPort(addr)
if err != nil {
return nil, err
}
ips, err := r.LookupHost(ctx, host)
if err != nil {
return nil, err
}
for _, ip := range ips {
var dialer net.Dialer
conn, err = dialer.DialContext(ctx, network, net.JoinHostPort(ip, port))
if err == nil {
break
}
}
return
},
}
In addition to the Refresh method, you can RefreshWithOptions. This method adds an option to persist resource records
on failed lookups
r := &Resolver{}
options := dnscache.ResolverRefreshOptions{}
options.ClearUnused = true
options.PersistOnFailure = false
resolver.RefreshWithOptions(options)
Related Skills
node-connect
343.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
xurl
343.1kA CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.
frontend-design
90.0kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
343.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
