From 075535747447e268758ba068fc7dff9d1b462adf Mon Sep 17 00:00:00 2001 From: mohong Date: Thu, 20 Oct 2016 15:19:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0readme.md=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- binding/golang/README.md | 60 ++++++++++++++++++++++++++++++++ binding/golang/ip2Region.go | 2 +- binding/golang/ip2Region_test.go | 18 ++-------- 3 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 binding/golang/README.md 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