diff --git a/g/container/gpool/gpool.go b/g/container/gpool/gpool.go index 844e0acfe..b6eda18b0 100644 --- a/g/container/gpool/gpool.go +++ b/g/container/gpool/gpool.go @@ -34,27 +34,29 @@ type poolItem struct { value interface{} // 对象值 } +// 对象创建方法类型 +type NewFunc func() (interface{}, error) + +// 对象过期方法类型 +type ExpireFunc func(interface{}) + // 创建一个对象池,为保证执行效率,过期时间一旦设定之后无法修改 // expire = 0表示不过期,expire < 0表示使用完立即回收,expire > 0表示超时回收 // 注意过期时间单位为**毫秒** -func New(expire int, newFunc...func() (interface{}, error)) *Pool { +func New(expire int, newFunc NewFunc, expireFunc...ExpireFunc) *Pool { r := &Pool { list : glist.New(), closed : gtype.NewBool(), Expire : int64(expire), + NewFunc : newFunc, } - if len(newFunc) > 0 { - r.NewFunc = newFunc[0] + if len(expireFunc) > 0 { + r.ExpireFunc = expireFunc[0] } gtimer.AddSingleton(time.Second, r.checkExpire) return r } -// 设置对象过期销毁时的关闭方法 -func (p *Pool) SetExpireFunc(expireFunc func(interface{})) { - p.ExpireFunc = expireFunc -} - // 放一个临时对象到池中 func (p *Pool) Put(value interface{}) { item := &poolItem { diff --git a/g/net/ghttp/ghttp_client_request_client.go b/g/net/ghttp/ghttp_client_request_client.go index 192471acc..410392fdd 100644 --- a/g/net/ghttp/ghttp_client_request_client.go +++ b/g/net/ghttp/ghttp_client_request_client.go @@ -52,7 +52,9 @@ func (c *Client) SetHeader(key, value string) { func (c *Client) SetHeaderRaw(header string) { for _, line := range strings.Split(strings.TrimSpace(header), "\n") { array, _ := gregex.MatchString(`^([\w\-]+):\s*(.+)`, line) - c.header[array[1]] = array[2] + if len(array) >= 3 { + c.header[array[1]] = array[2] + } } } diff --git a/g/os/gfpool/gfpool.go b/g/os/gfpool/gfpool.go index 6f7dacd88..1540a30ce 100644 --- a/g/os/gfpool/gfpool.go +++ b/g/os/gfpool/gfpool.go @@ -91,8 +91,7 @@ func newFilePool(p *Pool, path string, flag int, perm os.FileMode, expire int) * perm : perm, path : path, }, nil - }) - pool.SetExpireFunc(func(i interface{}) { + }, func(i interface{}) { i.(*File).File.Close() }) return pool