github.com/gogf/gf@v1.16.9/.example/container/gpool/gpool_expirefunc.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/gogf/gf/container/gpool"
     8  	"github.com/gogf/gf/net/gtcp"
     9  	"github.com/gogf/gf/os/glog"
    10  )
    11  
    12  func main() {
    13  	// 创建对象复用池,对象过期时间为3000毫秒,并给定创建及销毁方法
    14  	p := gpool.New(3000*time.Millisecond, func() (interface{}, error) {
    15  		return gtcp.NewConn("www.baidu.com:80")
    16  	}, func(i interface{}) {
    17  		glog.Println("expired")
    18  		i.(*gtcp.Conn).Close()
    19  	})
    20  	conn, err := p.Get()
    21  	if err != nil {
    22  		panic(err)
    23  	}
    24  	result, err := conn.(*gtcp.Conn).SendRecv([]byte("HEAD / HTTP/1.1\n\n"), -1)
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  	fmt.Println(string(result))
    29  	// 丢回池中以便重复使用
    30  	p.Put(conn)
    31  	// 等待一定时间观察过期方法调用
    32  	time.Sleep(4 * time.Second)
    33  }