ipFile.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package bootstrap
  2. import (
  3. "fmt"
  4. "github.com/lionsoul2014/ip2region/binding/golang/xdb"
  5. "strings"
  6. )
  7. var cBuffData []byte
  8. func InitIpFile() {
  9. // 1、从 dbPath 加载整个 xdb 到内存
  10. dbPath := "./ip2region.xdb"
  11. cBuff, err := xdb.LoadContentFromFile(dbPath)
  12. if err != nil {
  13. fmt.Printf("failed to load content from `%s`: %s\n", dbPath, err)
  14. return
  15. }
  16. cBuffData = cBuff
  17. }
  18. /* 通过id地址获取省份 并发使用时候 每个goruiting 需要创建一个独立的search */
  19. func FindAddressByIp(ip string) (string, string) {
  20. // 2、用全局的 cBuff 创建完全基于内存的查询对象。
  21. searcher, err := xdb.NewWithBuffer(cBuffData)
  22. if err != nil {
  23. fmt.Printf("failed to create searcher with content: %s\n", err)
  24. return "", ""
  25. }
  26. // do the search
  27. // var tStart = time.Now()
  28. region, err := searcher.SearchByStr(ip)
  29. if err != nil {
  30. fmt.Printf("failed to SearchIP(%s): %s\n", ip, err)
  31. return "", ""
  32. }
  33. data := strings.Split(region, "|")
  34. // fmt.Printf("{region: %s, took: %s}\n", data, time.Since(tStart))
  35. return data[2], data[3]
  36. }