github.com/songzhibin97/gkit@v1.2.13/container/pool/example_test.go (about)

     1  package pool
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  )
     7  
     8  var pool Pool
     9  
    10  type mock map[string]string
    11  
    12  func (m *mock) Shutdown() error {
    13  	return nil
    14  }
    15  
    16  // getResources: 获取资源,返回的资源对象需要实现 IShutdown 接口,用于资源回收
    17  func getResources(c context.Context) (IShutdown, error) {
    18  	return &mock{}, nil
    19  }
    20  
    21  func ExampleNewList() {
    22  	// NewList(options ...)
    23  	// 默认配置
    24  	// pool = NewList()
    25  
    26  	// 可供选择配置选项
    27  
    28  	// 设置 Pool 连接数, 如果 == 0 则无限制
    29  	// SetActive(100)
    30  
    31  	// 设置最大空闲连接数
    32  	// SetIdle(20)
    33  
    34  	// 设置空闲等待时间
    35  	// SetIdleTimeout(time.Second)
    36  
    37  	// 设置期望等待
    38  	// SetWait(false,time.Second)
    39  
    40  	// 自定义配置
    41  	pool = NewList(
    42  		SetActive(100),
    43  		SetIdle(20),
    44  		SetIdleTimeout(time.Second),
    45  		SetWait(false, time.Second))
    46  
    47  	// New需要实例化,否则在 pool.Get() 会无法获取到资源
    48  	pool.New(getResources)
    49  }
    50  
    51  func ExampleList_Get() {
    52  	v, err := pool.Get(context.TODO())
    53  	if err != nil {
    54  		// 处理错误
    55  	}
    56  	// v 获取到的资源
    57  	_ = v
    58  }
    59  
    60  func ExampleList_Put() {
    61  	v, err := pool.Get(context.TODO())
    62  	if err != nil {
    63  		// 处理错误
    64  	}
    65  
    66  	// Put: 资源回收
    67  	// forceClose: true 内部帮你调用 Shutdown回收, 否则判断是否是可回收,挂载到list上
    68  	err = pool.Put(context.TODO(), v, false)
    69  	if err != nil {
    70  		// 处理错误
    71  	}
    72  }
    73  
    74  func ExampleList_Shutdown() {
    75  	// Shutdown 回收资源,关闭所有资源
    76  	_ = pool.Shutdown()
    77  }