다음과 같은 golang코드를 작성하고 실행해봤습니다.
으아아아출력:
으아아아제가 이해한 바는 포인터 t
在 3 个循环后将指向“c”,因此三个 3“c”用于“hello2”输出。然而,延迟“hello”函数调用的行为非常奇怪。看起来它正在保留它所指向的位置。 (t test)
가 이것에 어떤 영향을 미치나요?
이것을 golang에서 무엇으로 컴파일하는지 궁금합니다. 매우 감사합니다!
은 for 루프 defer
语句的参数是一个闭包。闭包捕获循环变量 t
안에 있습니다.
값 수신자를 사용하는 호출의 경우 클로저에는 t
的副本。对于使用指针接收器的调用,闭包包含一个指向 t
포인터가 포함됩니다.
루프 변수는 반복할 때마다 다시 작성됩니다(이 동작은 언어의 이후 버전에서 변경됩니다). 따라서 값 수신기 클로저는 모든 값을 캡처하는 반면 포인터 수신기 클로저는 포인터만 캡처하므로 런타임에는 해당 포인터의 최신 값을 사용합니다.
위 내용은 동일한 구조에 대해 Golang은 for 루프에서 연기 시 다르게 동작합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!