이 코드에서는 문자열 조각(cmds)을 반복하는 두 개의 for 루프(loop1 및 loop2)를 만듭니다. 그러나 이러한 루프의 결과 출력은 다릅니다.
loop1에서는 cmds를 반복한 후 각 명령이 다음과 같은 함수에 매핑되는 맵(작업)이 생성됩니다. 명령을 인쇄합니다. 이러한 함수가 실행되면 cmds의 마지막 요소인 "update"가 모두 인쇄됩니다.
loop2에서도 비슷한 접근 방식이 사용되지만 저장하는 대신 작업 맵에서 명령을 직접 참조하면 해당 인덱스를 사용하여 명령 복사본이 만들어집니다. 이렇게 하면 각 함수에 고유한 명령 복사본이 있어 loop1에서 예기치 않은 "업데이트" 출력이 방지됩니다.
loop1의 특이한 동작은 클로저(에 저장된 함수)로 인해 발생합니다. 액션 맵) 참조 루프 변수.
각 함수에 대한 루프 변수의 복사본을 만들어(loop2에서와 같이) 각 함수는 후속 루프의 영향을 받지 않는 자체 격리된 변수를 갖습니다. iterations.
이 예는 Golang에서 변수 범위 지정의 중요성과 복사를 통해 생성된 루프 변수와 분리된 변수의 차이점을 강조합니다. 루프 변수를 참조하는 클로저로 작업할 때 변수 재사용으로 인한 예기치 않은 동작을 방지하기 위해 복사본이 만들어졌는지 확인하는 것이 중요합니다.
위 내용은 클로저를 사용할 때 Golang의 For 루프가 다른 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!