Go のスレッドローカル ストレージ
Java では、スレッドローカル ストレージは、現在のデータに関連付けられたデータを維持するための便利なツールです。糸。これは、各スレッドが独自のデータ セットにアクセスする必要があるマルチスレッド アプリケーションで特に有益です。人気のある最新のプログラミング言語である
Go には、Java のような組み込みの ThreadLocal クラスがありません。ただし、Go ランタイムおよび標準ライブラリは、Goroutine ローカル ストレージや、Goroutine ローカル ストレージの実装に使用できる Goroutine 識別子を提供しません。
この問題に対する 1 つの解決策は、サードパーティの gls パッケージを使用することです。このパッケージは、各 goroutine の一意の識別子に基づく goroutine ローカル ストレージ メカニズムを提供します。現在の goroutine に関連付けられたデータにアクセスして変更することができます。
ただし、gls パッケージのデータ保存方法は型破りであると考えられており、すべてのユースケースに適しているとは限りません。たとえば、Gin のような Web フレームワークのミドルウェアは、HTTP ハンドラーによって生成された goroutine から gls データにアクセスできません。
Goroutine ローカル ストレージの代替手段として、Go チームはコンテキストを関数の引数として明示的に渡すことを推奨しています。コンテキスト オブジェクトをパラメーターとして関数に提供することで、現在のリクエストまたは操作に関連付けられた任意のデータを渡すことができます。
たとえば、コンテキスト パッケージを使用して、データベース アクセス時間などの統計を追跡できます。コンテキスト オブジェクトはゴルーチンに渡し、データベース クエリの開始時刻と終了時刻を記録するために使用できます。これにより、複数の関数を変更することなくパフォーマンスを測定できます。
以上がGo にスレッドローカル ストレージを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。