1 try-catch

func TryCatch(tryFn func(), catchFn func(err Exception))
@param tryFn func() 代码容器
@param catchFn func(err bzcode.Exception) 代码容器中发生panic错误后返回的error message

bzcode.TryCatch(func() {

	// 制造一个会引起panic的场景
	type user struct {
		name string
	}
	var u *user = nil
	fmt.Println(u.name)
    
}, func(err bzcode.Exception) {
	fmt.Println("err => ", err.Message())
    fmt.Println("stack => ", err.Stack())
})

// Out: 
// err =>  runtime error: invalid memory address or nil pointer dereference
// stack =>  goroutine 6 [running]:
// runtime/debug.Stack()
// ...

2 三元运算

func Ternary[T any](b bool, v1 T, v2 T) T
@param b bool 条件:true时返回v1;false时返回v2
@param v1 T 值1,条件为true时作为返回值
@param v2 T 值2,条件为false时作为返回值
@return T 返回值

// 方式1:常规判断
b := "hello"
s := bzcode.Ternary(b == "hello", "yes", "no")
fmt.Println(s)
// Out: yes

// 方式2:匿名函数判断
i := bzcode.Ternary(func() bool { return true }(), 1, 2)
fmt.Println(i)
// Out: 1

// 方式3:嵌套
n := 8
res := bzcode.Ternary(n > 5, bzcode.Ternary(n > 7, "大于7", "小于等于7"), "小于等于5")
// 等同于
//if n > 5 {
//	if n > 7 {
//		res = "大于7"
//	} else {
//		res = "小于等于7"
//	}
//} else {
//	res = "小于等于5"
//}
fmt.Println(res)
// Out: 大于7

3 panic

func IfErrPanic(err error)
@param err error 错误信息

err := errors.New("异常")
bzcode.IfErrPanic(err)
// 直接退出,等同于:
// if err != nil {
// 	panic(err)
// }