Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie Elemente ohne Speicherneuzuweisung an einen Variadic-Funktions-Wrapper anhängen?

Wie können Sie Elemente ohne Speicherneuzuweisung an einen Variadic-Funktions-Wrapper anhängen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 05:45:30324Durchsuche

How Can You Append Items to a Variadic Function Wrapper Without Memory Reallocation?

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!

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