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 }