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!