go使用try

第一种

package main

import (
    "fmt"
)

// 假设 Onhand、cost.OrderRestore 和 cost.OrderStart 函数已经定义
func Onhand(it interface{}) {
    // 处理仓库的逻辑
    fmt.Println("处理仓库")
}
type Cost struct{}

func (c *Cost) OrderRestore(it interface{}) {
    // 处理审核的逻辑
    fmt.Println("处理审核")
}
func (c *Cost) OrderStart(it interface{}) {
    // 处理成本计算的逻辑
    fmt.Println("处理成本计算")
}

// 可以先定义一个工具类
func Try(userFn func(), catchFn func(err interface{})) {
    defer func() {
       if err := recover(); err!= nil {
          catchFn(err)
       }
    }()

    userFn()
}


func main() {
    var it interface{}
    var cost Cost
    Try(func() {
       Onhand(it)
       cost.OrderRestore(it)
       if billtype, ok := it.(struct{ Billtype *int }); ok && billtype.Billtype!= nil && *billtype.Billtype == 4 {
          fmt.Println("采购开单")
       }
       cost.OrderStart(it)
    }, func(err interface{}) {
       fmt.Printf("发生错误: %v\n", err)
    })
}

简单方式
Go实现类似 try catch 的异常处理

package main

import "fmt"

func Try(fun func(), handler func(interface{})) {
	defer func() {
		if err := recover(); err != nil {
			handler(err)
		}
	}()
	fun()
}

func main() {
	Try(func() {
		panic("test panic")
	}, func(err interface{}) {
		fmt.Println(err)
	})
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大得369

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值