mirror of
https://github.com/lionsoul2014/ip2region.git
synced 2025-12-08 19:25:22 +00:00
resource defer close and some optimizations
This commit is contained in:
parent
6db9654c7d
commit
e8b6049584
@ -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
|
||||
@ -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=
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user