You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决IP2Location十进制值转IP地址的Go语言实现问题

问题:IP2Location整数IP转PostgreSQL兼容的INET类型地址

背景与转换逻辑

IP2Location数据库中的IP范围以起始IP和结束IP的整数形式表示,其IP转整数的逻辑等效于以下PHP代码:

function ip62long($ipv6) {
  return (string) gmp_import(inet_pton($ipv6));
}

其中IPv4地址会被添加::ffff:前缀后再进行转换。

当前需求与存在问题

我正在尝试将IP2Location数据库导入PostgreSQL,计划使用INET类型列存储IP地址,因此需要将这些整数逆向转换为IP地址。

我目前使用的Go语言转换代码如下:

func StringToIp(in string) net.IP {
    var bigint big.Int
    bigint.SetString(in, 10)
    return bigint.Bytes()
}

该代码对普通IPv6地址(例如55838750788714571402502155597250560000转换为2a02:26f7:e5c4:c6c1::)及无前缀的IPv4地址(例如16909060转换为1.2.3.4)可以正常工作,但存在以下问题:

  • 所有带::ffff:前缀的IPv4地址,例如281470681743360应转换为0.0.0.0,但当前得到错误结果;
  • 特殊值如0、281470681743359、281474439839744、281474976710656无法正确转换。

寻求解决方案

需要一个能正确处理所有上述情况的Go语言实现,以满足PostgreSQL存储及后续IP查询的需求。

内容的提问来源于stack exchange,提问作者some-user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:25:34