我正在運行一段 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)
}
}
uj5u.com熱心網友回復:
當在 上使用 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的本機決議器作業。天啊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/392438.html
