Go에서 defer 키워드는 함수 실행 순서와 매개변수 평가 순서를 제어하는 데 중요한 역할을 합니다. 이는 일반적인 실행 흐름에 관계없이 포함하는 함수가 반환되기 직전에 특정 작업이 수행되도록 보장합니다.
일반 함수 호출과 달리, 지연된 함수는 다음과 같은 경우 평가되고 저장됩니다. defer 문이 발견되었습니다. 그러나 실제 실행은 둘러싸는 함수가 반환될 때까지 연기됩니다. 이를 통해 기본 기능이 기본 작업을 완료한 후 특정 작업을 실행할 수 있습니다.
예를 들어 다음 코드 조각을 고려하세요.
<code class="go">defer fmt.Println("...order is 4...Your age is:", getAge(&age)) defer fmt.Println("...order is 3...Your ticket price is:", printTicket(age))</code>
이 코드에서는 fmt.Println 문이 연기되고 해당 매개변수가 즉시 평가됩니다. 그러나 실제 인쇄는 main 함수가 반환될 때만 발생합니다. 또한 실행 순서가 바뀌어 마지막으로 지연된 문이 먼저 실행됩니다.
지연 프로세스를 더 자세히 설명하기 위해 다음 코드를 실행해 보겠습니다.
<code class="go">func having() func(string) { fmt.Print("Go ") // evaluation order: 1 return funWithGo } func fun(msg string) string { fmt.Print("have ") // evaluation order: 2 return msg } func funWithGo(msg string) { fmt.Println("fun", msg) // evaluation order: 4 }</code>
출력:
Go have some fun with Go.
이 예에서는 단계별 실행 프로세스를 관찰합니다.
연기된 함수의 매개변수는 함수가 실제로 실행될 때가 아니라 defer 문을 만날 때 평가된다는 점에 유의하는 것이 중요합니다. 이는 지연된 함수가 호출되기 전에 매개변수가 수정되면 예상치 못한 동작이 발생할 수 있습니다.
다음과 같은 다양한 시나리오에서 지연을 사용하는 것이 도움이 될 수 있습니다.
이해하기 defer 키워드의 평가 순서와 매개변수 처리는 Go 프로그램에서 이를 효과적으로 활용하는 데 매우 중요합니다. 이 강력한 기능을 수용함으로써 개발자는 코드의 견고성, 구성 및 유지 관리성을 향상시킬 수 있습니다.
위 내용은 Go에서 Defer는 어떻게 작동하나요? 함수 평가와 매개변수 처리 이해하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!