Heim  >  Artikel  >  Backend-Entwicklung  >  Was nützt der Golang-Verschluss?

Was nützt der Golang-Verschluss?

(*-*)浩
(*-*)浩Original
2019-12-27 14:16:553731Durchsuche

Was nützt der Golang-Verschluss?

Was ist eine Schließung?

Eine Go-Funktion kann ein Abschluss sein. Ein Abschluss ist ein Funktionswert, der auf eine Variable außerhalb des Funktionskörpers verweist. (Empfohlenes Lernen: go)

Diese Funktion kann auf die referenzierte Variable zugreifen und ihr Werte zuweisen; mit anderen Worten, diese Funktion ist daran „gebunden“. Variable überlegen.

Mein unzuverlässiges Verständnis ist, dass ein Abschluss einer Instanz einer Klasse entspricht und Variablen außerhalb des Funktionskörpers den in dieser Instanz gespeicherten Variablen entsprechen.

Wenn kein Abschluss erfolgt, handelt es sich bei der Funktion um eine einmalige Transaktion. Nachdem die Funktion ausgeführt wurde, kann der Wert der Variablen in der Funktion nicht geändert werden (der Speicher sollte freigegeben werden). 🎜>Mit Schließung Die Funktion wird zum Wert einer Variablen Solange die Variable nicht freigegeben wird, bleibt die Funktion immer aktiv und exklusiv, sodass der Wert der Variablen in der Funktion später geändert werden kann (da auf diese Weise der Speicher wird nicht von Go zurückgefordert, sondern wird immer dort zwischengespeichert).

Die Hauptbedeutung des Abschlusses

Reduzieren Sie den Umfang der Variablen und verringern Sie die Verschmutzung globaler Variablen. Wenn die folgende Akkumulation mithilfe globaler Variablen implementiert wird, werden die globalen Variablen leicht durch andere kontaminiert.

Wenn ich n Akkumulatoren implementieren möchte, benötige ich gleichzeitig jedes Mal n globale Variablen.

Mit dem Rucksack hat jeder generierte Akkumulator myAdder1, myAdder2 := adder(), adder() seine eigene unabhängige Summe. Die Summe kann als myAdder1.sum und myAdder2.sum betrachtet werden.

Nutzen Sie den Rucksack, um Funktionen mit eigenem Status umzusetzen!

package main

import (
	"fmt"
)

func adder() func(int) int {
	sum := 0
	return func(x int) int {
		sum += x
		return sum
	}
}

func main() {
	myAdder := adder()
	
	// 从1加到10
	for i := 1; i <= 10; i++ {
		myAdder(i)
	}
	
	fmt.Println(myAdder(0))
	// 再加上45
	fmt.Println(myAdder(45))
}

Ergebnis:

55// 1+...+10
100

Das obige ist der detaillierte Inhalt vonWas nützt der Golang-Verschluss?. 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