猿问

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

我粘贴了一段代码,应该捕获一个不起作用的错误,我不知道为什么。AllTopologyNodesDownError


func (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" error

type AllTopologyNodesDownError struct {

    errorBase


type errorBase struct {

    wrapped  error

    ErrorStr string

}

调试代码时出现的错误的屏幕截图


繁星coding
浏览 110回答 1
1回答

杨魅力

errors.Is()用于判断链中的任何错误是否与提供的错误1 的实例相同,此处永远不会出现这种情况,因为您提供了错误类型的文字,没有其他代码可以保存该实例或对它的引用。您的错误看起来像一个类型,以判断链中的任何错误是否是您应该使用的给定类型:errors.As()clusterTopology, err := sc.getClusterTopology(store)var errAllDown *AllTopologyNodesDownErrorif errors.As(err, &errAllDown) {    // err had an *AllTopologyNodesDownError in its    // chain and errAllDown now contains it.}可以通过实现错误类型未覆盖的接口来覆盖。Unwrap()
随时随地看视频慕课网APP

相关分类

Go
我要回答