Go で CMS を作成しており、セッション タイプ (ユーザー ID、レンダリングするページ コンテンツなど) があります。理想的には、その型をグローバル変数にしたいので、ネストされたすべての関数に伝播する必要はありませんが、そのようなグローバル変数を持つことは、新しいセッションごとに前のセッションを上書きすることを意味します。つまり、壮大な失敗になるでしょう。
一部の言語では、そのスレッド内で保持されるグローバルをスレッド内に保持する方法を提供します (つまり、そのグローバルの値はそのスレッド内でサンドボックス化されます)。ゴルーチンがスレッド化されていないことは承知していますが、自由に使える同様のメソッドがあるかどうか、またはさまざまなネストされたルーチンを介してセッション タイプのローカル ポインターを渡す必要があるかどうか疑問に思いました。
チャンネルはこれをしないと思いますか?私が収集できるものから(ここで間違っている場合は修正してください)、基本的にグローバル変数を共有する安全な方法ですか?
編集:この質問を忘れていました!とにかく、興味のある人のための更新です。この質問は、私が Go を初めて使用したときに書かれたもので、CMS は基本的に私の最初のプロジェクトでした。私は POSIX スレッドに精通した C のバックグラウンドを持っていましたが、関数パラメーターでポインターとして渡されるセッション オブジェクトを使用して、モード機能設計でコードを記述することがより良いアプローチであることにすぐに気付きました。これにより、コピーするデータの量を最小限に抑えながら、求めていたコンテキスト依存のローカル スコープが得られました。ただし、7 年前のプロジェクトであり、Go への移行が始まったばかりのプロジェクトであるため、多くの間違いが発生しているため、プロジェクトを大幅に書き直すことができると言っても過言ではありません。ただし、それは別の日の懸念事項です-現在は機能しており、外出先で他のプロジェクトが十分にあります。