diff --git a/binding/golang/ReadMe.md b/binding/golang/ReadMe.md index 60f6d7e..434a232 100644 --- a/binding/golang/ReadMe.md +++ b/binding/golang/ReadMe.md @@ -2,6 +2,44 @@ # 使用方式 +### package 获取 +```bash +go get github.com/lionsoul2014/ip2region/binding/golang +``` + +### API 使用 +```golang +import ( + "fmt" + "github.com/lionsoul2014/ip2region/binding/golang/xdb" + "time" +) + +func main() { + var dbPath = "ip2region.xdb file path" + searcher, err := xdb.New(dbPath) + if err != nil { + fmt.Printf("failed to create searcher: %s\n", err.Error()) + return + } + + defer searcher.Close() + + // do the search + var ip = "1.2.3.4" + var tStart = time.Now() + region, err := searcher.SearchByStr(ip) + if err != nil { + fmt.Printf("failed to SearchIP(%s): %s\n", ip, err) + return + } + + fmt.Printf("{region: %s, took: %s}\n", region, time.Since(tStart)) +} +``` + +# 编译测试程序 + # 查询测试 # bench 测试 diff --git a/binding/golang/main.go b/binding/golang/main.go index f63eb15..fa8649c 100644 --- a/binding/golang/main.go +++ b/binding/golang/main.go @@ -3,7 +3,7 @@ package main import ( "bufio" "fmt" - "github.com/lionsoul2014/ip2region/binding/golang/ip2region" + "github.com/lionsoul2014/ip2region/binding/golang/xdb" "github.com/mitchellh/go-homedir" "log" "os" @@ -57,7 +57,7 @@ func testSearch() { return } - searcher, err := ip2region.New(dbPath) + searcher, err := xdb.New(dbPath) if err != nil { log.Fatalf("failed to create searcher: %s", err.Error()) } @@ -84,14 +84,8 @@ func testSearch() { break } - ip, err := ip2region.CheckIP(line) - if err != nil { - fmt.Printf("invalid ip address `%s`\n", line) - continue - } - tStart := time.Now() - region, err := searcher.Search(ip) + region, err := searcher.SearchByStr(line) if err != nil { fmt.Printf("\x1b[0;31merr:%s\x1b[0m\n", err.Error()) } else { @@ -141,7 +135,7 @@ func testBench() { return } - searcher, err := ip2region.New(dbPath) + searcher, err := xdb.New(dbPath) defer func() { searcher.Close() }() @@ -163,13 +157,13 @@ func testBench() { return } - sip, err := ip2region.CheckIP(ps[0]) + sip, err := xdb.CheckIP(ps[0]) if err != nil { fmt.Printf("check start ip `%s`: %s\n", ps[0], err) return } - eip, err := ip2region.CheckIP(ps[1]) + eip, err := xdb.CheckIP(ps[1]) if err != nil { fmt.Printf("check end ip `%s`: %s\n", ps[1], err) return @@ -180,17 +174,17 @@ func testBench() { return } - mip := ip2region.MidIP(sip, eip) - for _, ip := range []uint32{sip, ip2region.MidIP(sip, mip), mip, ip2region.MidIP(mip, eip), eip} { + mip := xdb.MidIP(sip, eip) + for _, ip := range []uint32{sip, xdb.MidIP(sip, mip), mip, xdb.MidIP(mip, eip), eip} { region, err := searcher.Search(ip) if err != nil { - fmt.Printf("failed to search ip '%s': %s\n", ip2region.Long2IP(ip), err) + fmt.Printf("failed to search ip '%s': %s\n", xdb.Long2IP(ip), err) return } // check the region info if region != ps[2] { - fmt.Printf("failed Search(%s) with (%s != %s)\n", ip2region.Long2IP(ip), region, ps[2]) + fmt.Printf("failed Search(%s) with (%s != %s)\n", xdb.Long2IP(ip), region, ps[2]) return } diff --git a/binding/golang/ip2region/index.go b/binding/golang/xdb/index.go similarity index 99% rename from binding/golang/ip2region/index.go rename to binding/golang/xdb/index.go index bcfcba5..bcc398d 100644 --- a/binding/golang/ip2region/index.go +++ b/binding/golang/xdb/index.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a Apache2.0-style // license that can be found in the LICENSE file. -package ip2region +package xdb import ( "encoding/binary" diff --git a/binding/golang/ip2region/searcher.go b/binding/golang/xdb/searcher.go similarity index 94% rename from binding/golang/ip2region/searcher.go rename to binding/golang/xdb/searcher.go index 626dd2d..b4c334e 100644 --- a/binding/golang/ip2region/searcher.go +++ b/binding/golang/xdb/searcher.go @@ -6,7 +6,7 @@ // ip2region database v2.0 searcher. // @Note this is a Not thread safe implementation. -package ip2region +package xdb import ( "encoding/binary" @@ -100,7 +100,17 @@ func (s *Searcher) ClearVectorIndex() { s.vectorIndex = nil } -// Search find the region for the specified ip address +// SearchByStr find the region for the specified ip string +func (s *Searcher) SearchByStr(str string) (string, error) { + ip, err := CheckIP(str) + if err != nil { + return "", err + } + + return s.Search(ip) +} + +// Search find the region for the specified long ip func (s *Searcher) Search(ip uint32) (string, error) { // locate the segment index block based on the vector index var vIndex *VectorIndexBlock diff --git a/binding/golang/ip2region/searcher_test.go b/binding/golang/xdb/searcher_test.go similarity index 93% rename from binding/golang/ip2region/searcher_test.go rename to binding/golang/xdb/searcher_test.go index e021c3e..67d234e 100644 --- a/binding/golang/ip2region/searcher_test.go +++ b/binding/golang/xdb/searcher_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a Apache2.0-style // license that can be found in the LICENSE file. -package ip2region +package xdb import ( "fmt" diff --git a/binding/golang/ip2region/util.go b/binding/golang/xdb/util.go similarity index 98% rename from binding/golang/ip2region/util.go rename to binding/golang/xdb/util.go index a015a3d..1a53af5 100644 --- a/binding/golang/ip2region/util.go +++ b/binding/golang/xdb/util.go @@ -1,4 +1,4 @@ -package ip2region +package xdb import ( "encoding/binary"