Go の defer キーワードの機能を理解する
Go を使用する場合、defer キーワードの動作を理解することが重要です。このキーワードを使用すると、開発者は周囲の関数が戻るまで関数の実行を延期できます。ただし、defer ステートメントの実行時に関数の値とパラメーターが評価されることに注意することが重要です。
例: Defer Order の評価
これを説明するには、次のことを考えてください。 code:
<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 キーワードを使用してチケット価格に基づいて正しく出力できます。入力された年齢に応じて。以下はコードの修正バージョンです:
<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 中国語 Web サイトの他の関連記事を参照してください。