gpt4 book ai didi

json - golang 从 json 字符串中获取 key 的有效方法/lib,并使用此 key 执行 geoip,然后将 geoip 信息添加到 json

转载 作者:数据小太阳 更新时间:2023-10-29 03:14:00 30 4
gpt4 key购买 nike

如题,我想用golang做geoip,msg是json格式如下

{"type":"big_platform","xrealip":"8.8.8.8","scheme":"http","log_time":"24/Feb/2017:15:36:10 +0800","http_method":"GET","hostname":"XXX.com","url":"/v126330.apk","http_code":"206","send_byte":20972063,"user_agent":"63(android;KOOMII-K8;6.0;480x854;WIFI;1118.24)","@timestamp":"2017-02-24T15:36:10+08:00","process_time":59463,"cache_status":"TCP_HIT","refer":"-"}

我想用Go来解析这个消息并得到xrealip,用xrealip做geoip。然后将geoip信息添加到这个msg。

现在我像自爆了

//parse json string ,add geoip info and return new msg
func geoInfoAdd(msg string) ([]byte, error) {
data := make(map[string]interface{})
err := json.Unmarshal([]byte(msg), &data)
if err != nil {
return nil, err
}
//type assert value
var ok bool
if ipValue, ok = data[ipKey].(string); !ok {
// ask_price is not a string
return nil, errors.New("ipvalue not string")
}

//get ip location
loc, err := ip17mon.Find(ipValue)
if err != nil {
return nil, err
}
iplocation := map[string]string{"country": loc.Country, "region": loc.Region, "isp": loc.Isp}

//newdata := data
data["iplocation"] = iplocation
newmsg, err := json.Marshal(data)
if err != nil {
return nil, err
}

return newmsg, nil
}

但这真的很慢,需要大量的 CPU,我需要以每秒 70000 次的速度执行此操作。我真的需要更好的方法来做到这一点。

谢谢

最佳答案

如果您真的只需要这个 json 中的 xrealip,只需手动完成您需要的工作。这可能要快得多(您需要进行基准测试),正如 Adam 在下面所说的,您在网络上的时间可能比解析此 json 所花费的时间更重要:

// Find the key
key := `xrealip":"`
i := strings.Index(data,key) + len(key)
if i == -1 {
return errors.New("no ip")
}

// Extract ip up to max ip len (IPV4)
ip := data[i:i+15]

// Cut to just ip
q := strings.Index(ip,`"`)
if q > -1 {
ip = ip[:q]
}

您的函数可能应该处理字节,而不是字符串,并扫描而不是通过查找 "进行切割,但以上是基于您的函数。

还有其他 json 包 ( https://github.com/pquerna/ffjson ),但主要问题是在您只需要一个 key 时处理所有这些数据。

关于json - golang 从 json 字符串中获取 key 的有效方法/lib,并使用此 key 执行 geoip,然后将 geoip 信息添加到 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42433227/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com