ホームページ  >  記事  >  バックエンド開発  >  Golangにおけるシングルトンパターンの実装方法は何ですか?

Golangにおけるシングルトンパターンの実装方法は何ですか?

PHPz
PHPzオリジナル
2024-03-05 17:45:03562ブラウズ

Golangにおけるシングルトンパターンの実装方法は何ですか?

Golang でシングルトン モードを実装するには、遅延モード、ハングリー モード、ダブル チェック モードの 3 つの方法があります。次に、これら 3 つの実装方法を詳しく紹介し、具体的なコード例を示します。

1. 遅延モード

遅延モードとは、最初に呼び出されたときにのみシングルトン インスタンスが作成されることを意味します。以下は遅延モードのサンプル コードです:

package singleton

import (
    "sync"
)

type Singleton struct {
}

var instance *Singleton
var once sync.Once

func GetInstance() *Singleton {
    once.Do(func() {
        instance = &Singleton{}
    })
    return instance
}

In このコードでは、GetInstance 関数は同期パッケージの Once 構造体を使用して、初めて呼び出されたときにのみインスタンスが作成されるようにします。遅延モードを実装する場合は、同時実行の安全性に注意を払う必要があります。

2. ハングリーマン モード

ハングリーマン モードとは、プログラムの開始時に単一のインスタンスを作成することを指します。以下はハングリーマン モードのサンプル コードです:

package singleton

type Singleton struct {
}

var instance *Singleton = &Singleton{}

func GetInstance() *Singleton {
    return instance
}

Inこのコードでは、プログラムの起動時にインスタンスが作成されます。パッケージインポート時にGo言語のinit関数が自動的に呼び出されるため、ハングリーモードが実現できます。

3. Double-Checked Locking

Double-check モードは Lazy モードをベースに最適化する方法であり、Double-Check によって Lazy モードのシングルトンを実現します。以下はダブル チェック モードのサンプル コードです。

package singleton

import "sync"

type Singleton struct {
}

var instance *Singleton
var mu sync.Mutex

func GetInstance() *Singleton {
    if instance == nil {
        mu.Lock()
        defer mu.Unlock()
        if instance == nil {
            instance = &Singleton{}
        }
    }
    return instance
}

このコードでは、同時実行の安全性を確保するために sync.Mutex が使用され、遅延モードのシングルトン モードを実装するためにダブル チェックが使用されます。

上記は、Golang におけるシングルトン モードの 3 つの実装方法です。レイジー モード、ハングリー モード、ダブル チェック モードです。実際のニーズとパフォーマンス要件に基づいて、シングルトン パターンを実装するための適切な実装方法を選択します。

以上がGolangにおけるシングルトンパターンの実装方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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