github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/appparts/internal/pool/example_test.go (about)

     1  /*
     2   * Copyright (c) 2021-present Sigma-Soft, Ltd.
     3   * @author: Nikolay Nikitin
     4   */
     5  
     6  package pool_test
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"github.com/voedger/voedger/pkg/appparts/internal/pool"
    12  )
    13  
    14  func Example() {
    15  	// This example demonstrates how to use Pool.
    16  
    17  	// Create a new pool of integers.
    18  	p := pool.New[int]([]int{1, 2, 3})
    19  
    20  	func() {
    21  		fmt.Println("Simple borrow-use-release")
    22  
    23  		// Borrow a value from pool.
    24  		v, err := p.Borrow()
    25  		if err != nil {
    26  			panic(err)
    27  		}
    28  
    29  		// Use value.
    30  		fmt.Println(v, "enough:", p.Len())
    31  
    32  		// Release the value to pool.
    33  		p.Release(v)
    34  	}()
    35  
    36  	func() {
    37  		fmt.Println("Borrow values until get error, then releases all borrowed")
    38  		all := make([]int, 0, 3)
    39  
    40  		// Borrow all values from pool.
    41  		for v, err := p.Borrow(); err == nil; v, err = p.Borrow() {
    42  			fmt.Println(v, "enough:", p.Len())
    43  			all = append(all, v)
    44  		}
    45  
    46  		// Release borrowed values to pool.
    47  		for _, v := range all {
    48  			p.Release(v)
    49  		}
    50  	}()
    51  
    52  	// Output:
    53  	// Simple borrow-use-release
    54  	// 1 enough: 2
    55  	// Borrow values until get error, then releases all borrowed
    56  	// 2 enough: 2
    57  	// 3 enough: 1
    58  	// 1 enough: 0
    59  }