Go でのローカル変数の保存: C の 'static' の代替
Go では、C とは異なり、ローカル変数の「static」キーワード。ただし、クロージャの概念を活用することで、関数呼び出し間で値を保持するローカル変数を作成することは可能です。
Closure to the Rescue
Go のクロージャは、それが作成された関数の環境をキャプチャして共有する関数です。これには、クロージャのスコープ外で定義された変数へのアクセスが含まれます。クロージャを利用することで、C の静的ローカル変数と同様の動作をシミュレートできます。
Go の例
次のコードを考えてみましょう:
func main() { x := 0 func() { defer fmt.Println("x:", x) x++ }() for i := 0; i < 10; i++ { x++ } }
ここでは、'main' 関数内で変数 'x' を閉じる関数 (匿名) を定義します。これは、関数の実行時に 'x' の現在値をキャプチャします。
出力:
x: 1 x: 2 x: 3 .... x: 10
ご覧のとおり、'x' の値は増加します。 'main' 関数内でインクリメントされる 'x' から独立したまま、クローズドオーバー関数内で動作します。これは事実上、静的ローカル変数のように動作し、関数呼び出し間でその値を保持します。
注:
このアプローチは、関数が 'x' の値を取得するため機能します。 -値によるものではなく、参照。これにより、関数内で「x」に加えられた変更が、それを囲んでいるスコープに確実に反映されます。
以上がGo でローカル変数に対する C の 'static' キーワードをシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。