Go의 Defer 키워드 기능 이해
Go를 사용할 때 defer 키워드의 동작을 이해하는 것이 중요합니다. 이 키워드를 사용하면 개발자는 주변 함수가 반환될 때까지 함수 실행을 연기할 수 있습니다. 그러나 defer 문이 실행될 때 함수의 값과 매개 변수가 평가된다는 점에 유의하는 것이 중요합니다.
예: Defer Order 평가
이를 설명하려면 다음을 고려하세요. 코드:
<code class="go">package main import "fmt" func main() { defer having()(fun("with Go.")) fmt.Print("some ") // evaluation order: 3 } 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>
이 예에서 코드는 다음 순서로 실행됩니다.
Defer 원칙 적용
원래 쿼리에서 언급된 문제를 해결하려면 defer 키워드를 사용하여 티켓 가격을 기반으로 올바르게 인쇄할 수 있습니다. 입력한 나이에 다음은 코드의 수정된 버전입니다.
<code class="go">package main import "fmt" func main() { age := 999 defer fmt.Println("Your age is:", getAge(&age)) // defer printing the age defer fmt.Println("Your ticket price is:", getTicketPrice(age)) // defer printing the ticket price } func getTicketPrice(age int) float64 { // Calculate ticket price based on age // logic can be customized here fmt.Println("...order is 2...") switch { case age <= 13: return 9.99 case age > 13 && age < 65: return 19.99 default: return 12.99 } } func getAge(age *int) int { fmt.Println("...order is 1...") fmt.Print("Enter age=") fmt.Scanln(age) return *age }</code>
이 수정된 코드에서는 defer 키워드를 올바르게 활용하여 해당 기능이 실행된 후 연령과 티켓 가격이 인쇄되도록 하여 초기 문제를 해결했습니다. .
위 내용은 Go의 Defer 키워드는 함수 실행 순서에서 어떻게 작동하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!