>백엔드 개발 >Golang >Go에서 지연된 함수 인수는 어떻게 되나요?

Go에서 지연된 함수 인수는 어떻게 되나요?

DDD
DDD원래의
2024-12-20 12:37:11588검색

What Happens to Deferred Function Arguments in Go?

지연된 함수 인수 평가

질문: The Tour of Go의 인용문에 따르면 "지연된 호출의 인수는 즉시 평가됩니다." 이것이 의미하는 바는 무엇이며 실제로 평가되는 내용은 무엇입니까?

답변:

Go에서 defer 문은 바깥쪽 함수가 반환될 때까지 함수 실행을 지연시킵니다. 그러나 지연된 함수의 인수 평가는 즉시 발생합니다.

평가 프로세스 분석:

사양에는 각 "defer" 문에 대해 다음과 같이 명시되어 있습니다.

  • 함수 값: 연기할 함수는 다음과 같이 평가됩니다. 평소.
  • 매개변수: 지연된 함수에 대한 매개변수도 즉시 평가됩니다.

실제 함수 호출은 주변 함수가 반환될 때까지 실행되지 않습니다.

예:

다음을 고려하세요. 코드:

func def(s string) func() {
    fmt.Println("tier up")
    fmt.Println(s)
    return func() { fmt.Println("clean up") }
}

func main() {
    defer def("defered line")()
    fmt.Println("main")
}

평가 순서:

  1. def() 인수 평가: 매개변수 "defered line"이 즉시 평가됩니다. .
  2. def() 함수 평가: def() 함수가 호출되어 "계층 위로" 및 "지연된 라인"을 인쇄합니다.
  3. 지연 함수 평가: def()의 반환 값이 평가됩니다. "clean up"을 인쇄합니다.
  4. Deferred Function Execution: main()이 반환되면 지연된 함수가 실행되어 인쇄됩니다. "clean up."

결론:

defer 문을 사용하면 지연된 함수의 매개 변수가 즉시 평가됩니다. 이 프로세스를 통해 함수는 실행 시 변수의 최신 값에 액세스할 수 있습니다. 그러나 지연된 함수의 실제 실행은 주변 함수가 반환될 때까지 지연됩니다.

위 내용은 Go에서 지연된 함수 인수는 어떻게 되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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