net.LookupIP 是最快上手的 DNS A 记录查询方式底层调用系统解析器需传纯域名、判空遍历手动发包用 miekg/dns 可控性强但需设超时、用正确 Qtype 和 FQDN并发查 DNS 易因系统锁变慢建议换上游或加缓存。用 net.LookupIP 做最简 DNS A 记录查询直接调 net.LookupIP 是最快上手的方式适合查域名对应 IPv4/IPv6 地址。它底层走系统解析器/etc/resolv.conf不发原始 DNS 包所以快、稳、兼容性好。常见错误现象lookup example.com: no such host —— 很可能只是本地 DNS 配置问题不是代码写错了或者传了带 http:// 前缀的字符串得先用 strings.TrimPrefix 清掉。只传纯域名比如 google.com别传 https://google.com返回的是 []*net.IPAddr遍历时注意判空否则 panic默认查 A 和 AAAA如果只要 IPv4后续用 ip.To4() ! nil 过滤ips, err : net.LookupIP(github.com)if err ! nil { log.Fatal(err)}for _, ip : range ips { fmt.Println(ip.IP.String())}手动发 DNS 查询包用 github.com/miekg/dns需要控制查询类型比如查 TXT、MX、NS、指定上游服务器、看原始响应头或 EDNS 信息时就得绕过系统解析器自己组包发请求。容易踩的坑dns.Client 默认不设超时遇到无响应 DNS 服务器会卡死另外dns.Question 的 Qtype 必须用 dns.TypeA 这类常量不能写数字 1 或字符串 A否则查不到。立即学习“go语言免费学习笔记深入”务必设置 client.Timeout 3 * time.Second目标服务器地址格式是 8.8.8.8:53端口不能省查 CNAME 时响应里的 Answer 可能为空要检查 Extra 或递归查 Auth 段c : new(dns.Client)m : new(dns.Msg)m.SetQuestion(dns.Fqdn(cloudflare.com), dns.TypeTXT)r, _, err : c.Exchange(m, 1.1.1.1:53)查 SRV 记录时为什么总返回空net.LookupSRV 看似简单但实际使用中几乎必踩一个点它要求服务名和服务协议拼成 _service._proto 格式并且必须带结尾点FQDN。漏点、大小写错、顺序颠倒都会导致查不到。 Cleanup.pictures 智能移除图片中的物体、文本、污迹、人物或任何不想要的东西