我粘貼了一段代碼,應該捕獲一個不起作用的錯誤,我不知道為什么。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 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消