spannerlib优雅的go异常处理
蹩脚的go 异常处理
一般写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)
output
Exception MSG
testing.tRunner(/usr/local/go/src/testing/testing.go:1689)
字符处理
判断字符是否开始于
if str.StartWith("hello world","hello") {
//true
}
2.2. 通过字符实现字符截取
fmt.Println(E.Must1(StringPick("<html><body>123</body></html>", "<body>", "</body>")))
output:
123
spannerlib优雅的go异常处理的更多相关文章
- SpringBoot优雅的全局异常处理
前言 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要求 JD ...
- SpringBoot Validation优雅的全局参数校验
前言 我们都知道在平时写controller时候,都需要对请求参数进行后端校验,一般我们可能会这样写 public String add(UserVO userVO) { if(userVO.getA ...
- SpringBoot项目实现文件上传和邮件发送
前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...
- SpringBoot事物Transaction实战讲解教程
前言 本篇文章主要介绍的是SpringBoot的事物Transaction使用的教程. SpringBoot Transaction 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码 ...
- SpringBoot整合Swagger和Actuator
前言 本篇文章主要介绍的是SpringBoot整合Swagger(API文档生成框架)和SpringBoot整合Actuator(项目监控)使用教程. SpringBoot整合Swagger 说明:如 ...
- SpringCloud 别人的主页
https://www.cnblogs.com/xuwujing/ java(28) springBoot(14) 设计模式(14) springcloud(7) hadoop(7) hive(5) ...
- SpringBoot切面Aop的demo简单讲解
前言 本篇文章主要介绍的是SpringBoot切面Aop的demo简单讲解. SpringBoot Aop 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 切面(Aop) 一.概 ...
- Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回
前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...
- SpringBoot Validation参数校验 详解自定义注解规则和分组校验
前言 Hibernate Validator 是 Bean Validation 的参考实现 .Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的 ...
- SpringBoot整合Guacamole教程
前言 本文主要介绍的是SpringBoot如何整合Guacamole在浏览器是远程桌面的访问. Guacamole 介绍 Apache Guacamole 是一个无客户端远程桌面网关.它支持标准协议, ...
随机推荐
- 记录-JavaScript常规加密技术
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 当今Web开发中,数据安全是一个至关重要的问题,为了确保数据的安全性,我们需要使用加密技术.JavaScript作为一种客户端编程语言,可 ...
- 《.NET内存管理宝典》 售后服务系列文(2) - WinDbg命令.cmdtree
此文是<.NET内存管理宝典 提高代码质量.性能和可扩展性>(英文名<Pro .NET Memory Management: For Better Code, Performan ...
- Boruta特征选择
Boruta特征选择 官方github地址:https://github.com/scikit-learn-contrib/boruta_py?tab=readme-ov-file 论文地址:http ...
- verilog之锁存器和触发器
verilog锁存器和触发器 1.基本概念 锁存,就是输入信号变化时,输出不发生变化时,就是触发器或者锁存器.触发器的敏感信号是clk,即触发器是知道被延时了多少.对于锁存器来说,延时是不确定的.一般 ...
- archlinux xfce未中文化 goldendict不能显示中文
下载个中文字体包就好了 https://wiki.archlinuxcn.org/wiki/简体中文本地化
- 【Java面试题】SpringMVC
九.SpringMVC 63)SpringMVC 的流程 a.用户向服务器发送请求,请求被 SpringMVC 前端控制器 DispatchServlet 捕获: b.DispatcherServle ...
- 新前言with留言板
旧博客也是会用的,但是现在只用博客园写博客,平时csdn的东西也会凑凑热闹 欢迎各位julao来留言板留言 /* ID:lemondi1 LANG:C++ TASK:test */ #include ...
- #0/1分数规划#AT1807 食塩水
题目 从\(n\)对数\((w_i,p_i)\)中选择\(k\)对使得 \[\frac{\sum_{i=1}^k w'_i*p'_i}{\sum_{i=1}^k w'_i} \] 最大 分析 若可行解 ...
- 面试连环炮系列(二十六):什么情况下JVM频繁发生full GC
1. 什么情况下JVM频繁发生full GC? full gc触发条件是老年代空间不足,具体原因有四个: 系统并发高.执行耗时长或者创建对象过多,导致 young gc频繁,且gc后存活对象太多,但是 ...
- 重新整理.net core 计1400篇[三] (.net core 如何源代码调试和查看源码 )
前言 本来这里是写源代码的,因为vs没有那么容易调试查看到源代码,所以先把调试源代码和查看源代码弄完. 正文 需要修改一些vs配置,这个vs也是有要求的,要vs2017. 那么你还需要加载远程符号. ...