Heim > Backend-Entwicklung > Golang > Abschlüsse vs. Parameter in Go: Wann welche für anonyme Funktionen verwenden?

Abschlüsse vs. Parameter in Go: Wann welche für anonyme Funktionen verwenden?

DDD
Freigeben: 2024-11-30 05:47:14
Original
697 Leute haben es durchsucht

Closures vs Parameters in Go: When to Use Which for Anonymous Functions?

Parameter vs. Abschluss: Eintauchen in die Nuancen

In Go bieten Abschlüsse und Funktionsparameter unterschiedliche Mechanismen für den Umgang mit Variablen innerhalb anonymer Funktionen. Lassen Sie uns in die Nuancen eintauchen und herausfinden, wann ein Ansatz dem anderen überlegen ist.

Abschlüsse: Zugriff auf gemeinsam genutzte Variablen

Wenn eine anonyme Funktion als Abschluss fungiert, behält sie den Zugriff auf die in definierten Variablen den umgebenden Umfang. Diese Variablen werden von allen Instanzen des Abschlusses gemeinsam genutzt, was bedeutet, dass sie auf dieselbe Speicheradresse verweisen. Dies kann von Vorteil sein, wenn Sie möchten, dass mehrere Funktionsaufrufe mit denselben Daten arbeiten, z. B. um eine laufende Summe zu verwalten oder einen Zähler zu erhöhen.

Funktionsparameter: Wert kopieren

Im Gegensatz dazu, wenn Sie Wenn Sie einen Parameter an eine anonyme Funktion übergeben, erhält die Funktion eine Kopie des Werts. Dies bedeutet, dass jede Instanz der Funktion über eine eigene Kopie der Variablen verfügt, die vom aufrufenden Bereich isoliert ist. Dies ist von Vorteil, wenn Sie möchten, dass jeder Funktionsaufruf unabhängig ausgeführt wird, ohne den ursprünglichen Wert zu beeinträchtigen.

Den richtigen Ansatz wählen

Die Wahl zwischen der Verwendung eines Abschlusses oder eines Funktionsparameters hängt vom beabsichtigten Verhalten ab . Wenn alle Funktionsaufrufe dieselbe Variable und ihre Änderungen gemeinsam nutzen müssen, ist ein Abschluss besser geeignet. Wenn andererseits jeder Funktionsaufruf mit einer eigenen Kopie der Variablen arbeiten soll, sollte ein Parameter verwendet werden.

Um diesen Unterschied zu veranschaulichen, betrachten Sie die folgenden Beispiele:

Verschluss:

for i := 0; i < 3; i++ {
    go func() {
        fmt.Println(i)
    }()
}
Nach dem Login kopieren

Parameter:

for i := 0; i < 3; i++ {
    go func(v int) {
        fmt.Println(v)
    }(i)
}
Nach dem Login kopieren

Im Beispiel für einen Abschluss: Alle Funktionsaufrufe greifen auf dieselbe gemeinsam genutzte Variable i zu, die bei der Ausführung der Goroutinen den Endwert 3 hat. Dies führt dazu, dass die Ausgabe 3 dreimal gedruckt wird.

Im Funktionsparameter-Beispiel erhält jedoch jeder Funktionsaufruf zum Zeitpunkt des Aufrufs eine Kopie der Variablen i. Daher ist die Ausgabe 0, 1 und 2, da jede Goroutine den Wert von i in dem Moment ausgibt, in dem sie als Argument übergeben wurde.

Das obige ist der detaillierte Inhalt vonAbschlüsse vs. Parameter in Go: Wann welche für anonyme Funktionen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage