go中一个由较多步骤的操作写法(支持重试)

go中一个由较多步骤的操作写法

package main

import (
	"fmt"
)

var msg string
var err error

func main() {
	defer func() {
		result := "failed"
		if err == nil {
			result = "success"
		} else {
			msg += err.Error()
		}
		fmt.Printf("结束(%s), msg: %s\n", result, msg)
	}()

	steps := []func() error{
		step1,
		step2,
		step3,
		step4,
		step5,
	}

	failedStep := 0 // 保存失败的步骤索引

	for i := failedStep; i < len(steps); i++ {
		err = steps[i]()
		if err != nil {
			fmt.Printf("Step %d failed: %v\n", i+1, err)
			failedStep = i // 更新失败的步骤索引
			break
		}
	}
	fmt.Println("failedStep:", failedStep)
}

func step1() error {
	msg += "Step 1 "
	return nil
}

func step2() error {
	msg += "Step 2 "
	return nil
}

func step3() error {
	msg += "Step 3 "
	return fmt.Errorf("test step failed 3")
	//return nil
}

func step4() error {
	msg += "Step 4 "
	return nil
}

func step5() error {
	msg += "Step 5"
	return nil
}

此写法优点
  1. 统一处理结果(正常和异常), 方便记录任务整体日志以及每个环节的日志
  2. 步骤写在一起,逻辑清晰
  3. 支持指定第几步开始运行,方便进行重试逻辑
要求
  1. 每个步骤的func需要是统一的参数和返回值
  2. 共享的信息需要提前创建和设置OK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值