Go의 for-loop 변수가 로컬로 할당된 클로저 변수로 캡처되지 않습니까?
아니요. Go에서 캡처된 for-loop 변수는 기본적으로 변수가 아닌 값으로 캡처됩니다. 이 동작은 값 대신 변수를 캡처하기 위해 추가 구문이 필요한 C#과 같은 언어와 다릅니다.
예: 루프 변수를 값으로 캡처
package main import "fmt" func main() { a := 1 b := func() { fmt.Println(a) } // b captures the value of a, not the variable itself a++ b() // prints 1, not 2 }
이 예에서는 , 함수 b는 변수 자체에 대한 참조를 유지하는 대신 a가 정의된 시점의 값을 캡처합니다. 결과적으로 b를 정의한 후 a에 대한 모든 변경 사항은 b가 인쇄한 값에 반영되지 않습니다.
예: 루프 변수를 변수로 캡처
그러나 이는 각 반복에 대해 새 범위를 생성하는 클로저 구문을 사용하여 루프 변수를 변수로 캡처할 수 있습니다.
package main import "fmt" func main() { a := 1 for a < 10 { b := func() { fmt.Println(a) } // b captures the variable a in a new scope a++ b() // prints 2, 3, 4, ..., 10 } }
In 이 예에서 func 키워드는 루프의 각 반복에 대한 클로저를 생성하는 데 사용됩니다. 이 기술을 사용하면 각 클로저가 루프 변수에 대한 고유한 참조를 캡처하여 루프 내에서 값이 변경될 때 a 값을 관찰할 수 있습니다.
결론
이동 기본적으로 for-loop 변수를 값으로 캡처하지만 for-loop 변수를 변수로 캡처할 수 있는 클로저 구문도 제공합니다. 혼란을 피하고 정확하고 효율적인 Go 코드를 작성하려면 이러한 차이점을 이해하는 것이 중요합니다.
위 내용은 Go는 For-Loop 변수를 값이나 변수로 캡처합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!