resource defer close and some optimizations
This commit is contained in:
parent
6db9654c7d
commit
e8b6049584
|
|
@ -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
|
|
||||||
|
|
|
||||||
|
|
@ -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=
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue