为了账号安全,请及时绑定邮箱和手机立即绑定

golang 缓存 DNS 吗?

golang 缓存 DNS 吗?

Go
炎炎设计 2022-10-24 08:55:26
我正在运行一段 golang 代码来解析 url。这个 url 应该在 50% 的请求上返回一个 ip,在其他 50% 的请求上返回另一个 ip。这在我执行host命令时有效,但在我使用 Go 解析 DNS 时无效。在我的研究中,我看到的每个答案都说 Golang 不缓存 DNS,但行为似乎有所不同。谁能澄清一下?这是我的代码,我正在使用 for 循环运行它 100 次:for value in {1..100};do go run main.go;done    "fmt"    "net")func main() {    iprecords, _ := net.LookupIP("google.com")    for _, ip := range iprecords {        fmt.Println(ip)    }}
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

当在 上使用 CGO_ENABLED=1 (go build默认值)时OS X,根据net package docsGo将使用:

... 基于 cgo 的解析器 ... 在不允许程序发出直接 DNS 请求的系统上 (OS X)

因此,如果您正在观察 DNS 缓存MacOS- 那么这发生在操作系统级别。

您可以尝试使用 的Go本机 DNS 解析器,看看这是否是一个可行的替代方案。

您可以通过以下任一方式完成此操作:

CGO_ENABLED=0 go build  # disabling CGO

或更巧妙地使用运行时环境变量:

export GODEBUG=netdns=go    # force pure Go resolver

这有其局限性,例如 VPN 拆分隧道 DNS 路由无法使用Go的本机解析器工作。YMMV。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信