func E0(params ...interface{}) {
if params != nil && len(params) > 0 {
switch params[len(params)-1].(type) {
case error:
panic(params[len(params)-1])
}
}
}
func E1[T any](params ...interface{}) T {
var t T
if params != nil && len(params) > 0 {
switch params[len(params)-1].(type) {
case error:
panic(params[len(params)-1])
}
t = params[0].(T)
}
return t
}
func E2[T1, T2 any](params ...interface{}) (T1, T2) {
var t1 T1
var t2 T2
if params != nil && len(params) > 0 {
switch params[len(params)-1].(type) {
case error:
panic(params[len(params)-1])
}
t1 = params[0].(T1)
t2 = params[1].(T2)
}
return t1, t2
}
func E3[T1, T2, T3 any](params ...interface{}) (T1, T2, T3) {
var t1 T1
var t2 T2
var t3 T3
if params != nil && len(params) > 0 {
switch params[len(params)-1].(type) {
case error:
panic(params[len(params)-1])
}
t1 = params[0].(T1)
t2 = params[1].(T2)
t3 = params[2].(T3)
}
return t1, t2, t3
}
func E4[T1, T2, T3, T4 any](params ...interface{}) (T1, T2, T3, T4) {
var t1 T1
var t2 T2
var t3 T3
var t4 T4
if params != nil && len(params) > 0 {
switch params[len(params)-1].(type) {
case error:
panic(params[len(params)-1])
}
t1 = params[0].(T1)
t2 = params[1].(T2)
t3 = params[2].(T3)
t4 = params[3].(T4)
}
return t1, t2, t3, t4
}
func HandleError(err *error) {
if e := recover(); e != nil {
*err = fmt.Errorf("%e", e)
return
}
}
func plus(a, b int) (int, error) {
if a+b >= 0 {
return a + b, nil
}
return 0, errors.New("params error")
}
func test() (a int, e error) {
//e error必须要在返回值里面定义,不然会拿不到
defer HandleError(&e)
a += E1[int](plus(0, 1))
a += E1[int](plus(3, 1))
//出现error会中断执行
a += E1[int](plus(-5, 1))
return
}
func main() {
fmt.Println(test())
}
Golang一种优雅的处理error的方式(泛型实现)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 在我们的生活中,经常会听到这样一句话“性格决定命运”,那么,性格是如何形成的?性格如何影响我们的生活?这些问题都可...
- 引言 相信很多Android APP 开发者在处理TextView 换行的时候都曾头痛不已过,尤其是在做复杂布局的...
- 1.当代种种事件不同于历史之处,在于我们不知道它们会产生什么后果。 2.经验和利益的偶然结合,往往会向人们揭示...
- 干货要点: 1、叙述、描写和说明是三种记“实”的能力。 2、议论和抒情是两种写“虚”的能力。 3、根据表达的中心,...
- 2019/7/12 14:15二刷留念 01-集合框架(TreeSet) 接下来说Set集合中的TreeS...