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...