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

@ -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

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/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)
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.

View File

@ -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.

View File

@ -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 {

View File

@ -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)
}
}