Heim >Backend-Entwicklung >Golang >Wie kann ich mit fmt.Errorf eine benutzerdefinierte Fehlerfunktion ähnlich wie fmt.Sprintf erstellen?

Wie kann ich mit fmt.Errorf eine benutzerdefinierte Fehlerfunktion ähnlich wie fmt.Sprintf erstellen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 10:19:021086Durchsuche

How can I create a custom error function similar to fmt.Sprintf using fmt.Errorf?

Formatierte Fehlermeldungen mit fmt.Errorf

Anfangsproblem:

Sie wollten konstruieren eine benutzerdefinierte Version vonerrors.New, die den Eingabeparametern von fmt.Sprintf entspricht. Als Sie diese Funktion jedoch implementiert haben:

<code class="go">func NewError(format string, a ...interface{}) error {
    return errors.New(fmt.Sprintf(format, a))
}</code>

Sie sind auf ein Problem gestoßen, bei dem „a“ zu einem einzelnen Array-Parameter in NewError() wurde. Dies führte dazu, dass fmt.Sprintf nur ein Argument unzureichend in Ihre Formatzeichenfolge einfügte.

Lösung:

Das Hindernis, auf das Sie gestoßen sind, ist auf das Fehlen von ... zurückzuführen (das Auslassungspunkte) nach dem Parameter „a“ in Ihrer Funktionsdeklaration. Gemäß der Go-Spezifikation hindert diese Auslassung Ihren Code daran, die variable Anzahl von Argumenten korrekt zu verarbeiten.

fmt.Errorf zur Rettung

Zufälligerweise bereits fmt.Errorf verfügt über die gewünschte Funktionalität, die Sie implementieren wollten:

<code class="go">func Errorf(format string, a ...interface{}) error {
    return errors.New(Sprintf(format, a...))
}</code>

Durch Anhängen der Auslassungspunkte ermöglichen Sie fmt.Errorf, „a“ geschickt als eine variable Anzahl von Argumenten zu interpretieren und so geschickt auf die Anforderungen Ihrer Formatierung einzugehen Fehlermeldungen.

Das obige ist der detaillierte Inhalt vonWie kann ich mit fmt.Errorf eine benutzerdefinierte Fehlerfunktion ähnlich wie fmt.Sprintf erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn