Go言語のシングルパターンをどうやって実装するか
Go 言語では、シングルトンパターンを以下 2 つの手法で実装できます。
- 遅延初期化
type singleton struct {
// 单例对象的属性
}
var instance *singleton
// 获取单例对象的方法
func GetInstance() *singleton {
if instance == nil {
instance = &singleton{}
}
return instance
}
初回のGetInstance()メソッド呼び出し時にのみシングルトンオブジェクトを生成し、以降の呼び出しでは生成済みのオブジェクトを返す。
- 依存注入によるイニシャライゼーション
type singleton struct {
// 单例对象的属性
}
var instance *singleton = &singleton{}
// 获取单例对象的方法
func GetInstance() *singleton {
return instance
}
この方式ではシングルトンオブジェクトがプログラムの起動時に生成され、マルチスレッド環境でもインスタンスが1つだけ生成されることが保証されます。
どちらもGo言語のパッケージレベルの変数とパッケージレベルの関数に基づいて実装されており、シングルトンの唯一性とグローバルなアクセス可能性が保証されています。