main
API
main
packageAPI reference for the main
package.
F
function
main
examples/advanced/main.go:11-57
func main()
{
wf := workflow.New()
wf.Add("Flaky API",
workflow.WithRetry(workflow.RetryPolicy{MaxAttempts: 3, Delay: 100 * time.Millisecond},
func(ctx context.Context) error {
fmt.Println("Trying API...")
return nil
},
),
nil,
)
group := workflow.Group{
workflow.Step{
Name: "Upload Image",
Do: func(ctx context.Context) error {
fmt.Println("Uploading Image...")
time.Sleep(500 * time.Millisecond)
return nil
},
Compensate: func(ctx context.Context) error {
fmt.Println("Undo: Delete Image")
return nil
},
},
workflow.Step{
Name: "Upload Thumbnail",
Do: func(ctx context.Context) error {
fmt.Println("Uploading Thumb...")
return nil
},
Compensate: func(ctx context.Context) error {
fmt.Println("Undo: Delete Thumb")
return nil
},
},
}
wf.AddGroup(group)
fmt.Println("--- Starting Advanced Saga ---")
if err := wf.Run(context.Background()); err != nil {
fmt.Printf("Failed: %v\n", err)
} else {
fmt.Println("--- Success ---")
}
}
F
function
main
examples/basic/main.go:10-41
func main()
{
wf := workflow.New()
wf.Add("Reserve Stock",
func(ctx context.Context) error {
fmt.Println("Step 1: Reserving Stock...")
return nil
},
func(ctx context.Context) error {
fmt.Println("Undo 1: Releasing Stock")
return nil
},
)
wf.Add("Charge Card",
func(ctx context.Context) error {
fmt.Println("Step 2: Charging Card...")
return fmt.Errorf("insufficient funds")
},
func(ctx context.Context) error {
fmt.Println("Undo 2: Refund Card")
return nil
},
)
fmt.Println("Starting Workflow...")
if err := wf.Run(context.Background()); err != nil {
fmt.Printf("Workflow failed: %v\n", err)
} else {
fmt.Println("Workflow completed successfully!")
}
}