resource defer close and some optimizations

This commit is contained in:
lion 2025-09-12 12:52:15 +08:00
parent 6db9654c7d
commit e8b6049584
6 changed files with 22 additions and 35 deletions

View File

@ -3,5 +3,3 @@ module github.com/lionsoul2014/ip2region/binding/golang
go 1.17 go 1.17
require github.com/mitchellh/go-homedir v1.1.0 require github.com/mitchellh/go-homedir v1.1.0
require github.com/yookoala/realpath v1.0.0 // indirect

View File

@ -1,4 +1,2 @@
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= 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/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=

View File

@ -175,6 +175,7 @@ func testBench() {
fmt.Printf("failed to open source text file: %s\n", err) fmt.Printf("failed to open source text file: %s\n", err)
return return
} }
defer handle.Close()
var count, tStart, costs = int64(0), time.Now(), int64(0) var count, tStart, costs = int64(0), time.Now(), int64(0)
var scanner = bufio.NewScanner(handle) 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) return nil, fmt.Errorf("open xdb file `%s`: %w", dbPath, err)
} }
defer handle.Close()
// verify the xdb file // verify the xdb file
// @Note: do NOT call it every time you create a searcher since this will slow down the search response. // @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. // @see the util.Verify function for details.

View File

@ -84,8 +84,6 @@ type Searcher struct {
version *Version version *Version
handle *os.File handle *os.File
// header info
header *Header
ioCount int ioCount int
// use it only when this feature enabled. // use it only when this feature enabled.

View File

@ -69,11 +69,12 @@ func Verify(handle *os.File) error {
// get the runtime ptr bytes // get the runtime ptr bytes
runtimePtrBytes := 0 runtimePtrBytes := 0
if header.Version == Structure20 { switch header.Version {
case Structure20:
runtimePtrBytes = 4 runtimePtrBytes = 4
} else if header.Version == Structure30 { case Structure30:
runtimePtrBytes = header.RuntimePtrBytes runtimePtrBytes = header.RuntimePtrBytes
} else { default:
return fmt.Errorf("invalid version: %d", header.Version) return fmt.Errorf("invalid version: %d", header.Version)
} }
@ -98,10 +99,7 @@ func VerifyFromFile(dbFile string) error {
if err != nil { if err != nil {
return fmt.Errorf("open xdb file `%s`: %w", dbFile, err) return fmt.Errorf("open xdb file `%s`: %w", dbFile, err)
} }
defer handle.Close()
defer func(handle *os.File) {
_ = handle.Close()
}(handle)
return Verify(handle) return Verify(handle)
} }
@ -132,10 +130,7 @@ func LoadHeaderFromFile(dbFile string) (*Header, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err) return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err)
} }
defer handle.Close()
defer func(handle *os.File) {
_ = handle.Close()
}(handle)
header, err := LoadHeader(handle) header, err := LoadHeader(handle)
if err != nil { if err != nil {
@ -177,10 +172,7 @@ func LoadVectorIndexFromFile(dbFile string) ([]byte, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err) return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err)
} }
defer handle.Close()
defer func() {
_ = handle.Close()
}()
vIndex, err := LoadVectorIndex(handle) vIndex, err := LoadVectorIndex(handle)
if err != nil { if err != nil {
@ -225,10 +217,7 @@ func LoadContentFromFile(dbFile string) ([]byte, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err) return nil, fmt.Errorf("open xdb file `%s`: %w", dbFile, err)
} }
defer handle.Close()
defer func() {
_ = handle.Close()
}()
cBuff, err := LoadContent(handle) cBuff, err := LoadContent(handle)
if err != nil { if err != nil {

View File

@ -82,15 +82,16 @@ func VersionFromHeader(header *Header) (*Version, error) {
} }
// structure 3.0 after IPv6 supporting // structure 3.0 after IPv6 supporting
if header.Version == Structure30 { 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) return IPvx, fmt.Errorf("invalid version `%d`", header.IPVersion)
} }
}
switch header.IPVersion {
case IPv4VersionNo:
return IPv4, nil
case IPv6VersionNo:
return IPv6, nil
default:
return IPvx, fmt.Errorf("invalid version `%d`", header.Version) return IPvx, fmt.Errorf("invalid version `%d`", header.Version)
}
} }