Skip to content

💡 查询指定 IP

查询任意 IPv4/IPv6 地址的完整地理信息。

场景

需要根据用户提供的 IP 地址(如日志、请求头)查其地理位置。

🎨 一图抵千言

查询指定 IP 的调用结构:main 构造客户端后,对每个 IP 调用 GetIPInfo 取回结构化结果,再交给上层打印。

代码

go
func lookupIP(client *ipapi.Client, ip string) (*ipapi.IPInfo, error) {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	return client.GetIPInfo(ctx, ip, "json")
}

func main() {
	client := ipapi.NewClient()

	for _, ip := range []string{"8.8.8.8", "1.1.1.1", "2001:4860:4860::8888"} {
		info, err := lookupIP(client, ip)
		if err != nil {
			log.Printf("%s: %v", ip, err)
			continue
		}
		fmt.Printf("%s%s, %s (%s)\n", ip, info.City, info.CountryName, info.ASN)
	}
}

输出

8.8.8.8 → Mountain View, United States (AS15169)
1.1.1.1 → Los Angeles, United States (AS13335)
2001:4860:4860::8888 → Mountain View, United States (AS15169)

🎨 一图抵千言

上面看的是单次调用的时序,下面换个视角:在 main 的循环里,每个 IP 的处理其实是一条状态流转——校验、请求、结果或错误各自落到不同分支。

要点

  • ✅ 用 GetIPInfo
  • ✅ IPv4/IPv6 都支持
  • ✅ 每次单独设超时 ctx
  • ✅ 复用同一 client
运行预期输出与常见问题

预期输出

8.8.8.8 → Mountain View, United States (AS15169)
1.1.1.1 → Los Angeles, United States (AS13335)
2001:4860:4860::8888 → Mountain View, United States (AS15169)

常见问题

下一步

基于 MIT 许可证发布