我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

优雅的Go异常处理

来源:网络 更新时间:2024-04-26 04:30:42

一般来说,写Go语言的开发者,除非是在编写算法,否则在处理业务代码时可能会为优雅的异常处理而感到困扰。这是因为Go语言的设计者们似乎认为语法糖是一种低级的东西。然而,在大多数公司的业务逻辑中,缺乏语法糖会导致代码非常丑陋,难以维护。

为了让Go代码更具可读性,我们需要给Go语言加点糖!

引入spannerlib

go get github.com/lingdor/spannerlib

异常处理

通常我们需要这样写代码:

num, numErr := strconv.Itoa("123")
if numErr != nil {
    panic(numErr)
}
age, ageErr := strconv.Itoa("18")
if ageErr != nil {
    panic(ageErr)
}

优雅起来

ginRoute.use(func ContextInit() gin.HandlerFunc {
	return func(c *gin.Context) {
		if err := recover(); err != nil {
		log.Error(fmt.Sprintf("%v", err))
		if msg, ok := E.GetErrorData[string](err); ok {
			c.JSON(http.StatusOK, gin.H{
				"code":    1,
				"message": msg,
			})
			return
		}
	}
})


ginRoute.Get("/hello",func(c *gin.Context){
	
	year := E.Must1(strconv.Atoi(c.Query("year")))
	month := E.Must1(strconv.Atoi(c.Query("month))
    //others
})

//or
ginRoute.Get("/hello2",func(c *gin.Context){
	
	year := E.Catch1(strconv.Atoi(c.Query("year"))).IfErrorData("year格式不正确").Must()
	month := E.Catch1(strconv.Atoi(c.Query("month"))).IfErrorData("month格式不正确").Must()
   // others
})

增加堆栈打印

err := fmt.Errorf("123")
err := errors.Wrap(err, 0, "msg")

fmt.Printf("%v", err)

输出:

Exception MSG
testing.tRunner(/usr/local/go/src/testing/testing.go:1689)

字符处理

判断字符是否以指定字符开始

if str.StartWith("hello world", "hello") {
//true
}

通过字符实现字符截取

fmt.Println(E.Must1(StringPick("123", "", "")))

输出:


123