Go 缺乏板载 DNS 缓存吗?
尽管 Go 是网络爬行中资源高效操作的一个显着方面,但它目前缺乏原生 DNS查找缓存。这就提出了一个问题:底层操作系统是否包含 Go 可以利用的任何缓存设施。
检查潜在的替代方案
虽然 Go 不提供内置缓存,底层操作系统可能提供选项:
探索第三方解决方案
为了弥补 Go 中原生缓存的不足,请考虑使用 dnscache 等外部包。此解决方案可以轻松实现 DNS 缓存,如自述文件中的代码片段所示:
http.DefaultClient.Transport = &http.Transport { MaxIdleConnsPerHost: 64, Dial: func(network string, address string) (net.Conn, error) { separator := strings.LastIndex(address, ":") ip, _ := dnscache.FetchString(address[:separator]) return net.Dial("tcp", ip + address[separator:]) }, }
实现此代码可以缓存通过 http.Get 等函数发出的所有 HTTP 请求。
以上是Go 缺少板载 DNS 缓存吗?的详细内容。更多信息请关注PHP中文网其他相关文章!