Testcode siehe:golang Verschluss (anonyme Funktion) fängt falsch parameter`s Wert
package main
import "fmt"
func main() {
i := 10
closure1 := func() {
fmt.Printf("closure, i: %d\n", i)
i = 15
}
closure1()
fmt.Printf("in main, i: %d\n", i)
closure2 := func(x int) {
fmt.Printf("function call, pass parameter, i: %d\n", x)
}
i = 20
closure1()
closure2(i)
}
denke ich, die Ausgabe des closure2 20 sein sollte, aber das eigentliche Ergebnis ist 15, ich weiß nicht, warum? ??? Jeder kann mir helfen, bitte sehen Sie meinen Kommentar in meinem Code, danke im Voraus.
'i' ist 15 am Ende von' closure1' zugewiesen, das Sie vor Ihrem Aufruf von 'closure2' aufrufen. So übergeben Sie 15 zu 'closure2' –
[Fallstricke mit Closures in Go] (http://www.goinggo.net/2014/06/pitfalls-with-closures-in-go.html) –
ich sehe, Golang Verschluss fangen ein Verweis auf i, kein Snapshot-Wert, ich bekomme es, vielen Dank noch einmal. – scott