From ebcfb6e1ff47efbe7518e279ad013685c499a04e Mon Sep 17 00:00:00 2001 From: john Date: Fri, 2 Nov 2018 19:21:57 +0800 Subject: [PATCH] =?UTF-8?q?gfpool=E6=94=B9=E8=BF=9B=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/os/gfile/gfile_contents.go | 6 +++--- g/os/gfpool/gfpool.go | 20 ++++++++++++++------ 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/g/os/gfile/gfile_contents.go b/g/os/gfile/gfile_contents.go index bca02e2c6..34c35e84d 100644 --- a/g/os/gfile/gfile_contents.go +++ b/g/os/gfile/gfile_contents.go @@ -107,7 +107,7 @@ func GetNextCharOffsetByPath(path string, char byte, start int64) int64 { defer f.Close() return GetNextCharOffset(&f.File, char, start) } else { - // panic(err) + panic(err) } return -1 } @@ -126,7 +126,7 @@ func GetBinContentsTilCharByPath(path string, char byte, start int64) ([]byte, i defer f.Close() return GetBinContentsTilChar(&f.File, char, start) } else { - // panic(err) + panic(err) } return nil, -1 } @@ -146,7 +146,7 @@ func GetBinContentsByTwoOffsetsByPath(path string, start int64, end int64) []byt defer f.Close() return GetBinContentsByTwoOffsets(&f.File, start, end) } else { - // panic(err) + panic(err) } return nil } \ No newline at end of file diff --git a/g/os/gfpool/gfpool.go b/g/os/gfpool/gfpool.go index 143c902ce..2f1544f2a 100644 --- a/g/os/gfpool/gfpool.go +++ b/g/os/gfpool/gfpool.go @@ -42,24 +42,32 @@ type File struct { var pools = gmap.NewStringInterfaceMap() // 获得文件对象,并自动创建指针池(过期时间单位:毫秒) -func Open(path string, flag int, perm os.FileMode, expire...int) (*File, error) { +func Open(path string, flag int, perm os.FileMode, expire...int) (file *File, err error) { fpExpire := 0 if len(expire) > 0 { fpExpire = expire[0] } pool := pools.GetOrSetFuncLock(fmt.Sprintf("%s&%d&%d&%d", path, flag, expire, perm), func() interface{} { - return New(path, flag, perm, fpExpire) + if p, e := New(path, flag, perm, fpExpire); e == nil { + return p + } else { + err = e + } + return nil }).(*Pool) + if pool == nil { + return nil, err + } return pool.File() } -func OpenFile(path string, flag int, perm os.FileMode, expire...int) (*File, error) { +func OpenFile(path string, flag int, perm os.FileMode, expire...int) (file *File, err error) { return Open(path, flag, perm, expire...) } // 创建一个文件指针池,expire = 0表示不过期,expire < 0表示使用完立即回收,expire > 0表示超时回收,默认值为0不过期 // 过期时间单位:毫秒 -func New(path string, flag int, perm os.FileMode, expire...int) *Pool { +func New(path string, flag int, perm os.FileMode, expire...int) (*Pool, error) { fpExpire := 0 if len(expire) > 0 { fpExpire = expire[0] @@ -74,9 +82,9 @@ func New(path string, flag int, perm os.FileMode, expire...int) *Pool { if watcher, err := fsnotify.NewWatcher(); err == nil { p.watcher = watcher } else { - return nil + return nil, err } - return p + return p, nil } // 创建文件指针池