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)
// }