Heim >Backend-Entwicklung >Golang >Fehler. Gibt false zurück, wenn es Slices enthält

Fehler. Gibt false zurück, wenn es Slices enthält

王林
王林nach vorne
2024-02-12 16:36:05836Durchsuche

错误。如果包含切片,则返回 false

Frageninhalt

Error.Is scheint nicht zu funktionieren, wenn ich eine Fehlerstruktur habe, die darin verschachtelte Slices enthält:

package main

import (
    "errors"
    "fmt"
    "os"
)

type Response struct {
    Details []string
}

type ErrResponseError struct {
    Response Response
}

func (err ErrResponseError) Error() string {
    return "response error"
}

func main() {
    err := ErrResponseError{}
    fmt.Fprintf(os.Stdout, "equal: %v", errors.Is(err, ErrResponseError{}))
}

Rückkehr


equal: false
package main

import (
    "errors"
    "fmt"
    "os"
)

type Response struct {
    Details string // Changed this line
}

type ErrResponseError struct {
    Response Response
}

func (err ErrResponseError) Error() string {
    return "response error"
}

func main() {
    err := ErrResponseError{}
    fmt.Fprintf(os.Stdout, "equal: %v", errors.Is(err, ErrResponseError{}))
}

Rückkehr


equal: true

................................................. ............... ................................... ................................. ................ ................................................. ....................................................... ................................. ................ ................................................. .....

Lösung

Aus der Dokumentation:

Sie können dies tun, indem Sie eine Is Methode schreiben, um zwei Slices zu vergleichen.

Der standardmäßige Fehlervergleichsalgorithmus prüft, ob der Fehler mit dem Ziel übereinstimmt. Da Ihr Fehler ein Slice enthält, ist er nicht vergleichbar.

Das obige ist der detaillierte Inhalt vonFehler. Gibt false zurück, wenn es Slices enthält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen