第一种
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)
})
}