>  기사  >  백엔드 개발  >  익명 함수를 사용하여 For 루프에서 실행된 Go 고루틴이 모두 동일한 값을 인쇄하는 이유는 무엇입니까?

익명 함수를 사용하여 For 루프에서 실행된 Go 고루틴이 모두 동일한 값을 인쇄하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-23 18:22:17350검색

Why Do Go Goroutines Launched in a For Loop with Anonymous Functions All Print the Same Value?

for 루프 및 익명 함수를 사용한 Go 동시성의 예기치 않은 동작

Go 동시성에서는 실행 시 익명 함수의 동작을 이해하는 것이 필수적입니다. 고루틴으로. 이는 sync.WaitGroup을 사용하여 여러 고루틴이 Amazon S3 업로드를 완료할 때까지 기다리려고 시도할 때 입증되었습니다.

초기 코드에서는 for 루프를 사용하여 고루틴을 시작했지만 출력 결과 놀랍게도 모든 고루틴이 동일한 값을 인쇄하는 것으로 나타났습니다( 6). 이는 for 루프가 완료될 때까지 고루틴이 예약되지 않았기 때문에 발생했으며, 실행 시 i의 값은 6이었습니다.

익명 함수에 i를 인수로 전달하도록 코드가 수정되어 결과는 다음과 같습니다. 원하는 행동. 이는 i를 전달하면 새 변수가 생성되고 호출 시 값을 캡처하기 때문입니다.

이 동작은 익명 함수가 고루틴으로 시작될 때 상태를 캡처한다고 설명하는 Go FAQ와 일치합니다. 생성 당시의 주변 변수. i를 인수로 전달하면 그 순간의 값이 효과적으로 복사됩니다.

따라서 고루틴에서 익명 함수를 사용할 때는 클로저 동작을 고려하고 값 전달과 같은 기술을 사용하여 원하는 동시성 동작을 달성하는 것이 중요합니다.

위 내용은 익명 함수를 사용하여 For 루프에서 실행된 Go 고루틴이 모두 동일한 값을 인쇄하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.