diff --git a/binding/golang/README.md b/binding/golang/README.md new file mode 100644 index 0000000..8245dfd --- /dev/null +++ b/binding/golang/README.md @@ -0,0 +1,60 @@ +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 + diff --git a/binding/golang/ip2Region.go b/binding/golang/ip2Region.go index 7550210..d241c42 100644 --- a/binding/golang/ip2Region.go +++ b/binding/golang/ip2Region.go @@ -110,7 +110,7 @@ func (this *Ip2Region) MemorySearch(ipStr string) (ipInfo IpInfo, err error) { var dataPtr, l int64; for (l <= h) { - m := l + h >> 1 + m := (l + h) >> 1 p := this.firstIndexPtr + m * INDEX_BLOCK_LENGTH sip := getLong(this.dbBinStr, p) if ip < sip { diff --git a/binding/golang/ip2Region_test.go b/binding/golang/ip2Region_test.go index 8bf5fc9..5fb717c 100644 --- a/binding/golang/ip2Region_test.go +++ b/binding/golang/ip2Region_test.go @@ -4,25 +4,13 @@ import ( "testing" ) -func TestGetLong(t *testing.T) { - //region, err := New("../../../data/ip2region.db ") - //if err != nil { - // t.Error(err) - //} - //region.BtreeSearch("222.46.20.201") - //region.MemorySearch("222.46.20.201") - - //getLong([]byte("abcd"), 0) - -} - func BenchmarkBtreeSearch(B *testing.B) { region, err := New("../../data/ip2region.db ") if err != nil { B.Error(err) } for i:=0;i