You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
2.0 KiB

package closer_test
import (
"context"
"fmt"
"log"
"syscall"
"time"
"gitoa.ru/go-4devs/closer"
"gitoa.ru/go-4devs/closer/priority"
"gitoa.ru/go-4devs/closer/test"
)
func ExampleWait() {
ctx, cancel := context.WithTimeout(context.TODO(), time.Microsecond)
defer cancel()
closer.SetErrHandler(func(err error) {
fmt.Print("\nlogged err:", err.Error())
})
closer.Add(func() error {
fmt.Print("do some close. ")
return nil
})
closer.AddFirst(func() error {
fmt.Print("close http server for example. ")
return nil
})
closer.AddLast(func() error {
fmt.Print("close db for example.")
return nil
})
closer.AddByPriority(priority.Last-1, func() error {
return test.ErrClose
})
closer.Wait(ctx)
// Output:
// close http server for example. do some close. close db for example.
// logged err:some error
}
func ExampleClose() {
closer.Add(func() error {
// normal stop.
return nil
}, func() error {
time.Sleep(time.Millisecond)
// long normal stop.
return nil
})
closer.AddFirst(func() error {
// first stop.
return nil
})
closer.AddLast(func() error {
// last stop.
return nil
})
closer.AddByPriority(priority.First+1, func() error {
// run before first.
return nil
})
closer.AddByPriority(priority.Normal-1, func() error {
// run after normal.
return nil
})
closer.Close()
}
func ExampleWait_cancelContext() {
ctx, cancel := context.WithTimeout(context.Background(), time.Microsecond)
defer cancel()
closer.Add(func() error {
// do some close with cancel context
return nil
})
closer.Wait(ctx)
}
func ExampleSetErrHandler() {
closer.SetErrHandler(func(err error) {
log.Print("logged err:", err.Error())
})
closer.Add(func() error {
return test.ErrClose
})
closer.Close()
}
func ExampleWait_syscall() {
time.AfterFunc(time.Millisecond, func() {
_ = syscall.Kill(syscall.Getpid(), syscall.SIGTERM)
})
closer.Add(func() error {
// do some close with SIGTERM
return nil
})
closer.Wait(context.TODO(), syscall.SIGTERM)
}