90 lines
1.6 KiB
Markdown
90 lines
1.6 KiB
Markdown
### golang 实现ip地址查询
|
|
|
|
#### 获取
|
|
|
|
```
|
|
go get github.com/mohong122/ip2region/binding/golang
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 使用
|
|
|
|
```golang
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/mohong122/ip2region/binding/golang"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("err")
|
|
region, err := ip2region.New("ip2region.db")
|
|
defer region.Close()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
ip, err := region.MemorySearch("127.0.0.1")
|
|
fmt.Println(ip, err)
|
|
ip, err = region.BinarySearch("127.0.0.1")
|
|
fmt.Println(ip, err)
|
|
ip, err = region.BtreeSearch("127.0.0.1")
|
|
fmt.Println(ip, err)
|
|
}
|
|
|
|
```
|
|
|
|
#### 返回对象
|
|
```golang
|
|
type IpInfo struct {
|
|
CityId int64
|
|
Country string
|
|
Region string
|
|
Province string
|
|
City string
|
|
ISP string
|
|
}
|
|
```
|
|
|
|
#### 性能
|
|
|
|
|名称|次数|平均耗时|
|
|
|---|---|------|
|
|
BenchmarkBtreeSearch-4| 200000 | 7715 ns/op
|
|
BenchmarkMemorySearch-4| 2000000 | 840 ns/op
|
|
BenchmarkBinarySearch-4| 30000 | 42680 ns/op
|
|
|
|
|
|
#### 测试程序
|
|
|
|
```
|
|
cd /binging/golang
|
|
|
|
go run main.go ../../data/ip2Region.db
|
|
|
|
Or
|
|
|
|
go build -o ip2region main.go
|
|
./ip2region ../../data/ip2region.db
|
|
|
|
```
|
|
|
|
会看到如下界面
|
|
|
|
```
|
|
initializing
|
|
+-------------------------------------------------------+
|
|
| ip2region test script |
|
|
| format 'ip type' |
|
|
| type option 'b-tree','binary','memory' default b-tree |
|
|
| Type 'quit' to exit program |
|
|
+-------------------------------------------------------+
|
|
ip2reginon >> 127.0.0.1 memory
|
|
0|未分配或者内网IP|0|0|0|0 960.5µs
|
|
|
|
```
|