📍 ParseLatLong
🧩
IPInfo方法 · 将LatLong字符串解析为经纬度数值
📐 定义
go
func (info *IPInfo) ParseLatLong() (float64, float64, error)📖 说明
ParseLatLong 是绑定在 IPInfo 结构体上的辅助方法,用于把 ipapi.co 返回的 LatLong 字段(形如 "37.3860,-122.0838" 的字符串)拆分并解析为两个 float64 值。
🔍 解析规则:
- 以逗号
,分割info.LatLong字符串。 - 若分割后段数 不等于 2(例如空串、缺一端、多逗号),返回错误
invalid latlong format。 - 使用
fmt.Sscanf以%f格式分别解析纬度(lat)与经度(lon)。 - 任一段解析失败,立刻返回对应的解析错误。
- 成功时返回
(lat, lon, nil)。
🎨 一图抵千言
下面的流程图直观展示了 ParseLatLong 从字符串到 (lat, lon) 数值的解析全流程,含格式校验与逐段解析的错误分支。
⚠️ 注意点:
- 该方法 不会校验经纬度的有效范围(纬度应在
[-90, 90]、经度在[-180, 180])。它只负责把字符串转成数字,地理合理性需由调用方自行判断。 LatLong字段为空字符串时,strings.Split会得到长度为 1 的切片,从而触发invalid latlong format错误。- 当
info为nil时会触发空指针解引用,调用前请确保IPInfo实例已初始化。 - 此方法为 纯字符串解析,不发起任何网络请求,可在已缓存的
IPInfo上安全复用。
🚀 用法 / 示例
基础示例
go
package main
import (
"fmt"
"log"
"github.com/cyberspacesec/ipapi.co-skills/pkg/ipapi"
)
func main() {
// 通常通过 client.Lookup() 拿到 IPInfo,这里直接构造演示
info := &ipapi.IPInfo{LatLong: "37.3860,-122.0838"}
lat, lon, err := info.ParseLatLong()
if err != nil {
log.Fatalf("解析经纬度失败: %v", err)
}
fmt.Printf("纬度: %.4f\n", lat) // 纬度: 37.3860
fmt.Printf("经度: %.4f\n", lon) // 经度: -122.0838
}结合 Client 实战
go
package main
import (
"fmt"
"log"
"github.com/cyberspacesec/ipapi.co-skills/pkg/ipapi"
)
func main() {
client := ipapi.NewClient()
info, err := client.Lookup("8.8.8.8")
if err != nil {
log.Fatalf("查询失败: %v", err)
}
lat, lon, err := info.ParseLatLong()
if err != nil {
log.Fatalf("经纬度解析失败: %v", err)
}
fmt.Printf("Google DNS 位于 (%.4f, %.4f)\n", lat, lon)
}错误处理示范
go
package main
import (
"fmt"
"github.com/cyberspacesec/ipapi.co-skills/pkg/ipapi"
)
func main() {
cases := []string{
"37.3860,-122.0838", // 正常
"invalid", // 格式错误
"abc,-122.0838", // 纬度非数字
"37.3860,xyz", // 经度非数字
"", // 空串
}
for _, ll := range cases {
info := &ipapi.IPInfo{LatLong: ll}
lat, lon, err := info.ParseLatLong()
if err != nil {
fmt.Printf("LatLong=%-20q ❌ 错误: %v\n", ll, err)
continue
}
fmt.Printf("LatLong=%-20q ✅ lat=%.4f lon=%.4f\n", ll, lat, lon)
}
}预期输出:
text
LatLong="37.3860,-122.0838 " ✅ lat=37.3860 lon=-122.0838
LatLong="invalid " ❌ 错误: invalid latlong format
LatLong="abc,-122.0838 " ❌ 错误: expected integer
LatLong="37.3860,xyz " ❌ 错误: expected integer
LatLong=" " ❌ 错误: invalid latlong format🔗 相关
- 🧱 models —
IPInfo结构体定义,包含LatLong、Latitude、Longitude等字段 - 🛠️ methods —
IPInfo上的全部辅助方法一览(ParseLatLong、GetPostal等) - 📡 client —
Client查询入口,Lookup返回填充好的IPInfo - ⚠️ errors — SDK 错误类型与判断方式
- ⚙️ options — 配置
Client的各项选项