我粘贴了一段代码,应该捕获一个不起作用的错误,我不知道为什么。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()
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消