网站界面修改,建立网站需要什么技术,鄂州网站设计制作,线下推广什么意思虽然在Golang中#xff0c;在某些情况下进行方法改变并不是一个好的习惯#xff0c;但如果你把你的方法连锁起来#xff0c;那就很有用了。 这背后的原因是不同的异常处理方式#xff0c;在另一种编程语言中#xff0c;在一个chan函数中出现异常时#xff0c;它会抛出异常…虽然在Golang中在某些情况下进行方法改变并不是一个好的习惯但如果你把你的方法连锁起来那就很有用了。 这背后的原因是不同的异常处理方式在另一种编程语言中在一个chan函数中出现异常时它会抛出异常其他方法不会被运行。 在这篇文章中我将展示我们如何在Golang中实现它。 假设我想有一个应用注册表想动态地添加客户
package mainimport (errorsfmtlog
)type (ClientA struct {}ClientB struct {}ClientC struct {}
)type Registry struct {ca *ClientAcb *ClientBcc *ClientCerr error
}func (r *Registry) withClientA() *Registry {if r.err ! nil {return r}fmt.Println(client A initialed)r.ca ClientA{}return r
}func (r *Registry) withClientB() *Registry {if r.err ! nil {return r}r.err errors.New(error at initial client B)return r
}func (r *Registry) withClientC() *Registry {if r.err ! nil {return r}fmt.Println(client C initialed)r.cc ClientC{}return r
}func main() {c : Registry{}d : c.withClientA().withClientB().withClientC()if d.err ! nil {log.Fatalf(can not initial Clients due to %v, d.err)}
}
output:
client A initialed
2023/02/22 23:14:04 can not initial Clients due to error at initial client B
如果你运行它你可以看到由于ClientB初始化时的一个故意的错误该方法链将被失败错误将被缓存在注册表中。