我正在運行一段 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 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消