我正在运行一段 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 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。
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报
0/150
提交
取消