Go では、変数がアクティブなコード パスから参照されなくなったと Go ランタイムが判断すると、その変数は到達不能になります。これは、変数が宣言されたブロック内にある限り存在する従来のプログラミング言語の「変数スコープ」の概念とは異なります。
KeepAlive 関数の例に戻ると、変数 p はまだブロック内にあります。囲んでいる関数のスコープ。ただし、ランタイムは、syscall.Read(p.d, buf[:]) の呼び出し中に、これを到達不能としてマークする場合があります。これは、システム コールの進行中は Go コードの実行がブロックされ、後続のコードで p が参照されないためです。
したがって、runtime.KeepAlive 関数は、Read 呼び出し後まで p が到達可能な状態を維持するようにします。完了し、ファイナライザーがファイル記述子を途中で閉じることを防ぎます。
要約すると、Go の変数に到達できなくなります。時期:
runtime.KeepAlive を使用これは、外部関数呼び出し中またはバックグラウンドでアクセス不能になる変数の有効期間を延長するための一般的な方法です。タスクが実行されます。
以上がGo 変数が到達不能になるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。