golang 缓存 DNS 吗?

我正在运行一段 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)

    }

}


炎炎设计
浏览 112回答 1
1回答

噜噜哒

当在 上使用 CGO_ENABLED=1 (go build默认值)时OS X,根据net package docs,Go将使用:... 基于 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go