см тестового кода:закрытие golang (анонимно) функция уловы неправильно parameter`s значение
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)
}
Я думаю, что выход closure2 должен быть 20, но реальный результат 15, я не знаю, почему? ??? Кто-нибудь может мне помочь, пожалуйста, просмотрите мой комментарий в моем коде, спасибо заранее.
'i' назначается 15 в конце' закрытия1', который вы вызываете перед вызовом 'clos2'. Итак, вы передаете 15 на 'clos2' –
[Ловушки с закрытием в пути] (http://www.goinggo.net/2014/06/pitfalls-with-closures-in-go.html) –
я вижу, закрытие голанга ссылка на i, а не снимок, я получаю его, большое спасибо. – scott