ホームページ >バックエンド開発 >Golang >Go でシングルトン設計パターンを実装するにはどうすればよいですか?

Go でシングルトン設計パターンを実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-13 01:34:02221ブラウズ

How to Implement the Singleton Design Pattern in Go?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。