net.LookupIP 是最稳妥的 DNS A/AAAA 查询方式,仅接受纯域名,返回 []net.IP;需用 net.Resolver 自定义 DNS 服务器、超时等;非 A 记录需专用函数如 LookupMX;标准库不提供超时重试缓存,须自行封装。用 net.LookupIP 做基础 DNS A/AAAA 查询Go 标准库的 net.LookupIP 是最常用、也最稳妥的 DNS 查询入口,它自动处理 IPv4/IPv6 双栈、系统默认 resolver(如 /etc/resolv.conf)、超时和重试逻辑。不需要额外依赖,适合绝大多数服务发现、健康检查、白名单校验等场景。常见错误是直接传入带协议或端口的字符串(比如 "https://example.com:8080"),net.LookupIP 只接受纯域名("example.com"),否则会报 "lookup example.com:8080: no such host"。域名必须不含 scheme、path、query、端口 ------ 传 "example.com",别传 "example.com:443"返回的是 []net.IP,不是字符串;IPv4 地址长度为 4 字节,IPv6 为 16 字节,用 ip.To4() 或 ip.To16() 安全判断类型默认走系统 resolver,不走 TCP fallback;如果要强制 UDP/TCP 或指定 DNS 服务器,得换 net.Resolver用 net.Resolver 控制 DNS 查询行为当需要绕过系统配置、指定 DNS 服务器(比如 8.8.8.8)、设置自定义超时、或强制使用 TCP 协议时,net.Resolver 是唯一可控路径。它本质是 net.LookupIP 的"高级封装",但必须显式构造,且容易漏掉关键字段。典型翻车点:只设 PreferGo 却没配 Dial,导致仍走系统 stub resolver;或者 DialContext 返回的 net.Conn 没设读写超时,整个查询卡死。立即学习"go语言免费学习笔记(深入)";Resolver.PreferGo = true 仅启用 Go 自研解析器,但不自动启用自定义 DNS ------ 必须同时提供 Resolver.DialDial 函数里要用 net.DialTimeout("udp", "8.8.8.8:53", 2*time.Second),TCP 同理;UDP 失败后不会自动切 TCP,需自己封装重试逻辑并发查多个域名时,Resolver 实例可复用,但别在多个 goroutine 里共用未加锁的 sync.Pool 或 map 缓存结果 ------ Go 的 net.Resolver 本身是线程安全的查 MX、TXT、CNAME 等非 A 记录得用 net.LookupMX 等专用函数Go 不提供泛型 DNS 查询接口(比如类似 Python 的 dns.resolver.resolve(qname, "TXT")),每种记录类型都有独立函数:LookupMX、LookupTXT、LookupNS、LookupCNAME。它们底层都调用同一套 resolver,但参数和返回值完全不同。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
Aision_7 分钟前
从工具调用到 MCP、Skill完整学习记录辞旧 lekkk4 小时前
【Qt】信号和槽2301_809204706 小时前
JavaScript中严格模式use-strict对引擎解析的辅助.txtzjy277776 小时前
mysql如何选择合适的索引类型_mysql索引设计实战Aaswk6 小时前
Java Lambda 表达式与流处理笨蛋不要掉眼泪6 小时前
Mysql架构揭秘:update语句的执行流程万邦科技Lafite6 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析秋97 小时前
ruoyi项目更换为mysql9.7.0数据库Andya_net7 小时前
MySQL | MySQL 8.0 权限管理实践-精确赋予库、表只读等权限Cyber4K7 小时前
【Python专项】进阶语法-系统资源监控与数据采集(1)