> 백엔드 개발 > Golang > Go의 클로저와 매개변수: 언제 익명 함수에 어느 것을 사용해야 할까요?

Go의 클로저와 매개변수: 언제 익명 함수에 어느 것을 사용해야 할까요?

DDD
풀어 주다: 2024-11-30 05:47:14
원래의
705명이 탐색했습니다.

Closures vs Parameters in Go: When to Use Which for Anonymous Functions?

매개변수 대 클로저: 뉘앙스 탐구

Go에서 클로저와 함수 매개변수는 익명 함수 내의 변수를 처리하기 위한 고유한 메커니즘을 제공합니다. 미묘한 차이를 살펴보고 한 접근 방식이 다른 접근 방식보다 우수한지 살펴보겠습니다.

클로저: 공유 변수 액세스

익명 함수가 클로저 역할을 할 때, 다음에 정의된 변수에 대한 액세스를 유지합니다. 주변 범위. 이 변수는 클로저의 모든 인스턴스에서 공유됩니다. 즉, 동일한 메모리 주소를 참조합니다. 이는 누계를 유지하거나 카운터를 증가시키는 등 동일한 데이터에 대해 여러 함수 호출을 수행하려는 경우에 유용할 수 있습니다.

함수 매개변수: 값 복사

반대로, 익명 함수에 매개변수를 전달하면 함수는 값의 복사본을 받습니다. 이는 함수의 각 인스턴스가 호출 범위에서 격리된 고유한 변수 복사본을 가짐을 의미합니다. 이는 원래 값에 영향을 주지 않고 각 함수 호출이 독립적으로 작동하기를 원할 때 유용합니다.

올바른 접근 방식 선택

클로저 사용과 함수 매개변수 사용 중 선택은 의도한 동작에 따라 다릅니다. . 동일한 변수와 해당 수정 사항을 공유하기 위해 모든 함수 호출이 필요한 경우 클로저가 더 적합합니다. 반면, 각 함수 호출이 자체 변수 복사본에서 작동해야 하는 경우 매개변수를 사용해야 합니다.

이 차이점을 설명하려면 다음을 고려하세요. 예:

클로저:

for i := 0; i < 3; i++ {
    go func() {
        fmt.Println(i)
    }()
}
로그인 후 복사

매개변수:

for i := 0; i < 3; i++ {
    go func(v int) {
        fmt.Println(v)
    }(i)
}
로그인 후 복사

클로저 예에서 모든 함수 호출은 고루틴이 실행될 때 최종 값이 3인 동일한 공유 변수 i에 액세스합니다. 이로 인해 출력 3이 세 번 인쇄됩니다.

그러나 함수 매개 변수 예에서 각 함수 호출은 호출 시 변수 i의 복사본을 받습니다. 따라서 각 고루틴은 인수로 전달된 순간의 i 값을 인쇄하므로 출력은 0, 1, 2입니다.

위 내용은 Go의 클로저와 매개변수: 언제 익명 함수에 어느 것을 사용해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿