38 lines
561 B
Go
38 lines
561 B
Go
// Package utils/geoip_util.go
|
|
package utils
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/oschwald/geoip2-golang"
|
|
)
|
|
|
|
var (
|
|
geoDB *geoip2.Reader
|
|
geoOnce sync.Once
|
|
)
|
|
|
|
// InitGeoIP 初始化 GeoIP 数据库
|
|
func InitGeoIP(geoDBPath string) error {
|
|
var err error
|
|
geoOnce.Do(func() {
|
|
if geoDBPath != "" {
|
|
geoDB, err = geoip2.Open(geoDBPath)
|
|
}
|
|
})
|
|
return err
|
|
}
|
|
|
|
// GetGeoIP 获取 GeoIP 实例
|
|
func GetGeoIP() *geoip2.Reader {
|
|
return geoDB
|
|
}
|
|
|
|
// CloseGeoIP 关闭 GeoIP 数据库
|
|
func CloseGeoIP() error {
|
|
if geoDB != nil {
|
|
return geoDB.Close()
|
|
}
|
|
return nil
|
|
}
|