ホームページ > バックエンド開発 > Golang > Go でローカル変数に対する C の 'static' キーワードをシミュレートするにはどうすればよいですか?

Go でローカル変数に対する C の 'static' キーワードをシミュレートするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-03 12:18:10
オリジナル
853 人が閲覧しました

How Can I Simulate C's 'static' Keyword for Local Variables in Go?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート