Go でのシングルトン デザイン パターンの実装
シングルトン デザイン パターンは、クラスのインスタンス化を単一のオブジェクトに制限します。その使用についてはよく議論されますが、特定のシナリオでは、実用的な解決策になる可能性があります。
実装
Go でシングルトン パターンを実装するには、次のことから始めます。 code:
package singleton type single struct { O interface{}; } var instantiated *single = nil func New() *single { if instantiated == nil { instantiated = new(single); } return instantiated; }
ここで、プライベート構造体 single は、単一のインスタンスに制限するオブジェクトを定義します。インスタンス化されたプライベート変数は、オブジェクトのインスタンス化を追跡します。インスタンスを取得するためのパブリック関数 New() を定義します。
スレッド セーフティ
ただし、この実装はスレッド セーフではありません。これに対処するには、sync.Once 型を使用します。
package singleton import "sync" type single struct { O interface{}; } var instantiated *single var once sync.Once func New() *single { once.Do(func() { instantiated = &single{} }) return instantiated }
ここで、sync.Once は、同時環境であってもシングルトンが 1 回だけインスタンス化されることを保証します。
代替案
あるいは、シングルトンの動作を強制する簡単な方法として、パッケージ レベルのスコープ設定を検討する価値があります。
要約すると、Go でシングルトン パターンを実装するには、単一のメソッドを通じてインスタンスの作成を制御する必要があります。関数。スレッド セーフは sync.Once を使用して実現できます。ただし、提案されているように、適切に構造化され保守しやすい設計を確保するには、コード内でシングルトンの必要性を疑問視することが賢明です。
以上がGo でシングルトン設計パターンを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。