()
| 13 | ) |
| 14 | |
| 15 | func main() { |
| 16 | fmt.Println("=== Aster Workflow 示例 ===") |
| 17 | |
| 18 | ctx := context.Background() |
| 19 | |
| 20 | // 创建 Workflow |
| 21 | wf := workflow.New("DataProcessing"). |
| 22 | WithStream(). |
| 23 | WithDebug() |
| 24 | |
| 25 | // 步骤 1: 加载数据 |
| 26 | wf.AddStep(workflow.NewFunctionStep("load", func(ctx context.Context, input *workflow.StepInput) (*workflow.StepOutput, error) { |
| 27 | fmt.Println("📥 Step 1: Loading data...") |
| 28 | return &workflow.StepOutput{ |
| 29 | Content: map[string]any{ |
| 30 | "data": []string{"item1", "item2", "item3"}, |
| 31 | "count": 3, |
| 32 | }, |
| 33 | Metadata: make(map[string]any), |
| 34 | }, nil |
| 35 | })) |
| 36 | |
| 37 | // 步骤 2: 处理数据 |
| 38 | wf.AddStep(workflow.NewFunctionStep("process", func(ctx context.Context, input *workflow.StepInput) (*workflow.StepOutput, error) { |
| 39 | fmt.Println("⚙️ Step 2: Processing data...") |
| 40 | |
| 41 | // 从前一步获取数据 |
| 42 | var dataMap map[string]any |
| 43 | if input.PreviousStepContent != nil { |
| 44 | dataMap, _ = input.PreviousStepContent.(map[string]any) |
| 45 | } |
| 46 | |
| 47 | if dataMap != nil { |
| 48 | if data, ok := dataMap["data"].([]string); ok { |
| 49 | processed := make([]string, len(data)) |
| 50 | for i, item := range data { |
| 51 | processed[i] = "processed_" + item |
| 52 | } |
| 53 | return &workflow.StepOutput{ |
| 54 | Content: map[string]any{ |
| 55 | "processed": processed, |
| 56 | "count": len(processed), |
| 57 | }, |
| 58 | Metadata: make(map[string]any), |
| 59 | }, nil |
| 60 | } |
| 61 | } |
| 62 | |
| 63 | return nil, errors.New("invalid input: expected map with 'data' field") |
| 64 | })) |
| 65 | |
| 66 | // 步骤 3: 转换数据 |
| 67 | wf.AddStep(workflow.NewFunctionStep("transform", func(ctx context.Context, input *workflow.StepInput) (*workflow.StepOutput, error) { |
| 68 | fmt.Println("🔄 Step 3: Transforming data...") |
| 69 | |
| 70 | result := "No data" |
| 71 | if input.PreviousStepContent != nil { |
| 72 | if dataMap, ok := input.PreviousStepContent.(map[string]any); ok { |
nothing calls this directly
no test coverage detected