Variadic-Funktions-Wrapper: Anhängen von Elementen ohne Speicherneuzuweisung
Variadic-Funktionen bieten eine praktische Möglichkeit, eine beliebige Anzahl von Argumenten an eine Funktion zu übergeben. Beim Umschließen verschiedener Funktionen kann das Anhängen zusätzlicher Elemente jedoch zu einer Speicherzuweisung führen. In diesem Artikel werden verschiedene Ansätze untersucht, um unnötige Speicherzuweisung in solchen Wrappern zu vermeiden.
Ineffiziente Ansätze
Versuch, den Variadic-Slice direkt mithilfe des Ellipsenoperators „…“ zu erweitern (Ansatz 1) kann zu „zu vielen Argumenten“-Fehlern oder Problemen mit Typkonflikten führen (Ansatz 2).
Ansatz 3 weist einen neuen Slice zu, um die zusätzlichen Elemente aufzunehmen, was bei häufigen Protokollierungs- oder Debugging-Vorgängen ineffizient sein kann .
Effizienter Ansatz
Ein effizienterer Ansatz besteht darin, die Append-Funktion zu verwenden, um den Slice ohne Neuzuweisung dynamisch zu vergrößern. Die Append-Funktion gibt ein neues Slice mit den zusätzlichen Elementen zurück, die an das vorhandene Slice angehängt sind.
<code class="go">func Debug(a ...interface{}) { if debug { fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...)...) } }</code>
Dieser Einzeiler hängt das Präfix und das Trennzeichen an ein Slice an, das aus den ursprünglichen Variadic-Argumenten (a) erstellt wurde, und übergibt das resultierendes Slice nach fmt.Fprintln. Durch die Nutzung der Append-Funktion vermeidet dieser Ansatz eine Speicherneuzuweisung und erfüllt gleichzeitig die Parameteranforderungen der Variadic-Funktion.
Das obige ist der detaillierte Inhalt vonWie können Sie Elemente ohne Speicherneuzuweisung an einen Variadic-Funktions-Wrapper anhängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!