π Function β
go
import (
"fmt"
"time"
"github.com/thuongtruong109/gouse"
)
1. Function delay β
Description: Delay function execution for a specific time.
Input params: (func() string, delay int)
go
func FunctionDelay() {
println("Delay start:")
result := gouse.DelayF(func() string {
return "Delayed return after 2s"
}, 2)
if result.HasReturn {
println(result.Value)
} else {
println("No result")
}
gouse.DelayFunc(func() {
println("Delayed not return")
}, 3)
}
2. Function interval β
Description: Execute function at a specific interval.
Input params: (func(), interval int)
go
func FunctionInterval() {
gouse.IntervalFunc(func() {
println("Interval")
}, 1)
}
3. Function lock β
Description: Lock function execution.
go
func FunctionLock() {
oneInOneOutLockFunc := gouse.LockFunc(func(i any) any {
return i
}).(func(any) any)("one input - one output")
fmt.Println(oneInOneOutLockFunc)
twoInTwoOutLockFunc1, twoInTwoOutLockFunc2 := gouse.LockFunc(func(i1, i2 any) (any, any) {
return i1, i2
}).(func(any, any) (any, any))("two input - two output (a)", "two input - two output (b)")
fmt.Println(twoInTwoOutLockFunc1, twoInTwoOutLockFunc2)
gouse.LockFunc(func() {
println("no input - no output")
}).(func())()
exampleRWLockFunc := func(a, b int) int {
return a + b
}
lockedFunc := gouse.RWLockFunc(exampleRWLockFunc).(func(int, int) int)
result := lockedFunc(5, 3)
fmt.Println("RW Lock function result:", result)
}
4. Function parallel β
Description: Parallelize multi functions execution.
Input params: (...func())
go
func FunctionParallel() {
function1 := func() {
for range 5 {
time.Sleep(100 * time.Millisecond)
fmt.Println("Function 1 is executing")
}
}
function2 := func() {
for range 5 {
time.Sleep(200 * time.Millisecond)
fmt.Println("Function 2 is executing")
}
}
function3 := func() {
for range 5 {
time.Sleep(300 * time.Millisecond)
fmt.Println("Function 3 is executing")
}
}
gouse.ParallelizeFunc(function1, function2, function3)
}
5. Function remain β
Description: Limit function execution.
Input params: (func(), times int)
go
func FunctionRemain() {
gouse.RemainFunc(func() {
println("Times")
}, 3)
}
6. Function retry β
Description: Retry function execution.
Input params: (func(), times int, delay int)
go
func FunctionRetry() {
gouse.RetryFunc(func() error {
println("Retry")
return nil
}, 3, 1)
}
7. Function run time β
Description: Measure function execution time.
Input params: (time.Time, func())
go
func FunctionRunTime() {
exampleFunc := func() {
time.Sleep(2 * time.Second)
fmt.Println("Task completed.")
}
duration := gouse.RunTimeFunc(time.Now(), exampleFunc)
fmt.Printf("Function run in: %v\n", duration)
}
8. Function defer wrapper β
Description: Wrap defer function
Input params: (...func())
go
func FunctionDeferWrapper() {
gouse.DeferWrapper(
func() error {
fmt.Println("Connecting to database...")
return nil
},
func() {
fmt.Println("Disconnecting from database...")
},
)
}