> 백엔드 개발 > Golang > Go Closure 본문 뒤에 언제 괄호가 필요합니까?

Go Closure 본문 뒤에 언제 괄호가 필요합니까?

DDD
풀어 주다: 2024-12-09 02:56:10
원래의
1020명이 탐색했습니다.

When Are Parentheses Required After a Go Closure Body?

Go의 클로저 본문 괄호

Go에서는 클로저 본문 뒤의 괄호 사용법을 이해하기 어려울 수 있습니다. 두 가지 예를 검토하여 이 개념을 더 자세히 살펴보겠습니다.

함수 리터럴:

함수 리터럴 예에서:

func(ch chan int) { ch <- ACK }(replyChan)
로그인 후 복사

괄호는 즉시 클로저 본문(replyChan) 뒤에 함수 리터럴을 호출하고 replyChan 인수를 전달합니다.

Defer 문:

defer 문 예에서:

func f() (result int) {
    defer func() {
        result++
    }() // why and how?
    return 0
}
로그인 후 복사

클로저 본문 뒤의 괄호()는 다음과 같습니다. 클로저에만 관련된 것은 아니지만 defer 문 구문의 일부입니다. Go 언어 사양에 따르면 defer 문의 표현식은 항상 함수 호출이어야 합니다. 따라서 클로저가 즉시 호출된다는 것을 나타내기 위해 괄호가 필요합니다.

함수 호출 구문의 중요성:

Go에서는 함수 간에 뚜렷한 차이가 있습니다. 값과 함수 호출. 함수 값은 실제 함수 정의를 참조하고 함수 호출은 함수 실행을 나타냅니다.

다음 코드를 고려하세요.

func f() int { return 42 }

a := f // function value
b := f() // function call
로그인 후 복사

첫 번째 줄에서 a에는 f의 함수 값, 두 번째 줄에서는 b에 f를 호출한 결과가 할당됩니다.

마찬가지로 defer 문에서 표현식은 다음과 같아야 합니다. 단순한 함수 값이 아닌 함수 호출. 따라서 함수 호출을 나타내려면 괄호가 필요합니다.

추가 참고:

괄호는 빈 목록을 포함한 표현식 목록을 포함할 수도 있습니다. 이 구별은 클로저가 실행되는 시기와 인수를 결정하기 때문에 중요합니다.

위 내용은 Go Closure 본문 뒤에 언제 괄호가 필요합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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