From e8b60495840f9674f151235ecfd0bfbfa3862e5a Mon Sep 17 00:00:00 2001 From: lion Date: Fri, 12 Sep 2025 12:52:15 +0800 Subject: [PATCH] resource defer close and some optimizations --- binding/golang/go.mod | 4 +--- binding/golang/go.sum | 2 -- binding/golang/main.go | 3 +++ binding/golang/xdb/searcher.go | 2 -- binding/golang/xdb/util.go | 27 ++++++++------------------- binding/golang/xdb/version.go | 19 ++++++++++--------- 6 files changed, 22 insertions(+), 35 deletions(-) diff --git a/binding/golang/go.mod b/binding/golang/go.mod index 2bb4dc1..130ba4c 100644 --- a/binding/golang/go.mod +++ b/binding/golang/go.mod @@ -2,6 +2,4 @@ module github.com/lionsoul2014/ip2region/binding/golang go 1.17 -require github.com/mitchellh/go-homedir v1.1.0 - -require github.com/yookoala/realpath v1.0.0 // indirect +require github.com/mitchellh/go-homedir v1.1.0 \ No newline at end of file diff --git a/binding/golang/go.sum b/binding/golang/go.sum index 837982a..ae38d14 100644 --- a/binding/golang/go.sum +++ b/binding/golang/go.sum @@ -1,4 +1,2 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/yookoala/realpath v1.0.0 h1:7OA9pj4FZd+oZDsyvXWQvjn5oBdcHRTV44PpdMSuImQ= -github.com/yookoala/realpath v1.0.0/go.mod h1:gJJMA9wuX7AcqLy1+ffPatSCySA1FQ2S8Ya9AIoYBpE= diff --git a/binding/golang/main.go b/binding/golang/main.go index c6ff081..2bb0288 100644 --- a/binding/golang/main.go +++ b/binding/golang/main.go @@ -175,6 +175,7 @@ func testBench() { fmt.Printf("failed to open source text file: %s\n", err) return } + defer handle.Close() var count, tStart, costs = int64(0), time.Now(), int64(0) var scanner = bufio.NewScanner(handle) @@ -235,6 +236,8 @@ func createSearcher(dbPath string, cachePolicy string) (*xdb.Searcher, error) { return nil, fmt.Errorf("open xdb file `%s`: %w", dbPath, err) } + defer handle.Close() + // verify the xdb file // @Note: do NOT call it every time you create a searcher since this will slow down the search response. // @see the util.Verify function for details. diff --git a/binding/golang/xdb/searcher.go b/binding/golang/xdb/searcher.go index b1044b8..b93a829 100644 --- a/binding/golang/xdb/searcher.go +++ b/binding/golang/xdb/searcher.go @@ -84,8 +84,6 @@ type Searcher struct { version *Version handle *os.File - // header info - header *Header ioCount int // use it only when this feature enabled. diff --git a/binding/golang/xdb/util.go b/binding/golang/xdb/util.go index 2fb9114..50eaf92 100644 --- a/binding/golang/xdb/util.go +++ b/binding/golang/xdb/util.go @@ -69,11 +69,12 @@ func Verify(handle *os.File) error { // get the runtime ptr bytes runtimePtrBytes := 0 - if header.Version == Structure20 { + switch header.Version { + case Structure20: runtimePtrBytes = 4 - } else if header.Version == Structure30 { + case Structure30: runtimePtrBytes = header.RuntimePtrBytes - } else { + default: return fmt.Errorf("invalid version: %d", header.Version) } @@ -98,10 +99,7 @@ func VerifyFromFile(dbFile string) error { if err != nil { return fmt.Errorf("open xdb file `%s`: %w", dbFile, err) } - - defer func(handle *os.File) { - _ = handle.Close() - }(handle) + defer handle.Close() return Verify(handle) } @@ -132,10 +130,7 @@ func LoadHeaderFromFile(dbFile string) (*Header, error) { if err != nil { return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err) } - - defer func(handle *os.File) { - _ = handle.Close() - }(handle) + defer handle.Close() header, err := LoadHeader(handle) if err != nil { @@ -177,10 +172,7 @@ func LoadVectorIndexFromFile(dbFile string) ([]byte, error) { if err != nil { return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err) } - - defer func() { - _ = handle.Close() - }() + defer handle.Close() vIndex, err := LoadVectorIndex(handle) if err != nil { @@ -225,10 +217,7 @@ func LoadContentFromFile(dbFile string) ([]byte, error) { if err != nil { return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err) } - - defer func() { - _ = handle.Close() - }() + defer handle.Close() cBuff, err := LoadContent(handle) if err != nil { diff --git a/binding/golang/xdb/version.go b/binding/golang/xdb/version.go index 7a5358c..47234eb 100644 --- a/binding/golang/xdb/version.go +++ b/binding/golang/xdb/version.go @@ -82,15 +82,16 @@ func VersionFromHeader(header *Header) (*Version, error) { } // structure 3.0 after IPv6 supporting - if header.Version == Structure30 { - if header.IPVersion == IPv4VersionNo { - return IPv4, nil - } else if header.IPVersion == IPv6VersionNo { - return IPv6, nil - } else { - return IPvx, fmt.Errorf("invalid version `%d`", header.IPVersion) - } + if header.Version != Structure30 { + return IPvx, fmt.Errorf("invalid version `%d`", header.IPVersion) } - return IPvx, fmt.Errorf("invalid version `%d`", header.Version) + switch header.IPVersion { + case IPv4VersionNo: + return IPv4, nil + case IPv6VersionNo: + return IPv6, nil + default: + return IPvx, fmt.Errorf("invalid version `%d`", header.Version) + } }