Heim > Artikel > Backend-Entwicklung > Gibt es ein Problem mit der Übergabe eines einzelnen Fehlers an „errors.Join'?
Wenn der PHP-Editor Xinyi die Fehlerbehandlung löst, stößt er häufig auf das Problem, einen einzelnen Fehler an Fehler zu übergeben. Treten Sie bei. Mit dieser Methode werden mehrere Fehlermeldungen zu einer Zeichenfolge zusammengefügt, um die Aufzeichnung und Anzeige von Fehlerprotokollen zu erleichtern. Wir müssen jedoch beachten, dass bei zu vielen oder zu langen Fehlermeldungen die verkettete Zeichenfolge möglicherweise das Systemlimit überschreitet und ein Teil der Fehlermeldung verloren geht. Daher müssen wir bei der Verwendung vonerrors.Join die Anzahl und Länge der Fehlermeldungen sorgfältig abwägen, um eine vollständige Aufzeichnung und Fehlerbehebung von Fehlern sicherzustellen.
go 1.20 hat die errors.join
-Funktion eingeführt, die mehrere Fehler umschließen kann. Gibt es Probleme beim Aufrufen dieser Funktion und beim Übergeben nur eines Fehlers?
In diesem Artikel wird beispielsweise empfohlen, den Rückgabewert defer f.close()
习惯用法,因为这会默默地忽略 close
返回的任何错误。相反,它建议使用命名返回值 err
来允许传播 close
nicht für beschreibbare Dateien zu verwenden – es sei denn, dies würde einen vorherigen Fehler überschreiben:
defer func() { cerr := f.close() if err == nil { err = cerr } }()
In diesem Fall erscheint es richtiger, errors.join
zu verwenden:
defer func() { cerr := f.Close() err = errors.Join(err, cerr) }()
Wenn err
和 cerr
均非零,则现在将返回两个错误。如果都是nil
,则返回nil
.
Wenn jedoch einer nil
ist und der andere ungleich nil
ist, dann nil
而另一个是非 nil
,则 errors.join
不仅会返回非 nil
错误,还会返回一个 errors.joinerror
围绕它的包装器。包装这样的错误会导致任何问题吗?特别是如果调用堆栈中的多个函数使用这种方法,那么单个错误可能会在多层包装器中结束?
如果 errors.joinerror
只有一个非零错误,那仍然是一个连接错误,并且 errors.as
和 errors.is
wird nicht nur ein Fehler ungleich nil
zurückgegeben, sondern auch a errors.joinerror
Ein Wrapper darum herum. Können solche Verpackungsfehler Probleme verursachen? Insbesondere wenn mehrere Funktionen im Aufrufstapel diesen Ansatz verwenden, kann ein einzelner Fehler möglicherweise in mehreren Wrapper-Ebenen landen?
Problemumgehung
Wenn errors.joinerror
nur einen Fehler ungleich Null aufweist, handelt es sich immer noch um einen Join-Fehler, und die Funktionen errors.as
und errors.is
funktionieren wie erwartet. Dies gilt unabhängig von der Verschachtelungsebene des Verbindungsfehlers.
err:=someFunc() if err==io.EOF { ... }🎜Dann wird das scheitern. Dieser Code muss neu geschrieben werden, um 🎜 verwenden zu können. 🎜
Das obige ist der detaillierte Inhalt vonGibt es ein Problem mit der Übergabe eines einzelnen Fehlers an „errors.Join'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!