为了账号安全,请及时绑定邮箱和手机立即绑定

错误。Is() 不能正常工作

错误。Is() 不能正常工作

Go
繁星coding 2022-10-04 16:44:41
我粘贴了一段代码,应该捕获一个不起作用的错误,我不知道为什么。AllTopologyNodesDownErrorfunc (sc *ServerConfig) addNodesToCluster(store *ravendb.DocumentStore) error {        clusterTopology, err := sc.getClusterTopology(store)        if errors.Is(err, &ravendb.AllTopologyNodesDownError{}) {            for _, url := range sc.Url.List {                    err = addNodeToCluster(store, url)                    if err != nil {                        return err                    }            }        } else if err != nil {            return err        }是ravendb.AllTopologyNodesDownError// AllTopologyNodesDownError represents "all topology nodes are down" errortype AllTopologyNodesDownError struct {    errorBase} type errorBase struct {    wrapped  error    ErrorStr string}调试代码时出现的错误的屏幕截图
查看完整描述

1 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

errors.Is()用于判断链中的任何错误是否与提供的错误1 的实例相同,此处永远不会出现这种情况,因为您提供了错误类型的文字,没有其他代码可以保存该实例或对它的引用。


您的错误看起来像一个类型,以判断链中的任何错误是否是您应该使用的给定类型:errors.As()


clusterTopology, err := sc.getClusterTopology(store)

var errAllDown *AllTopologyNodesDownError

if errors.As(err, &errAllDown) {

    // err had an *AllTopologyNodesDownError in its

    // chain and errAllDown now contains it.

}

可以通过实现错误类型未覆盖的接口来覆盖。Unwrap()


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信