golangでシングルトンパターンを実装する方法は何ですか?

Go言語では、次の方法でシングルトンパターンを実装することができます:

  1. sync.Onceを利用して実装されたシングルトンパターン:
package singleton

import "sync"

type singleton struct{}

var instance *singleton
var once sync.Once

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

この例では、sync.Onceを使用して、一度だけ実行される機能が実現され、インスタンスが1回だけ作成されることが保証されています。

  1. sync.Mutexを使用して実装されたシングルトンパターン:
package singleton

import "sync"

type singleton struct{}

var instance *singleton
var mu sync.Mutex

func GetInstance() *singleton {
    mu.Lock()
    defer mu.Unlock()

    if instance == nil {
        instance = &singleton{}
    }
    return instance
}

この例では、sync.Mutexを使用して相互排他制御が実装され、インスタンスの作成と取得がスレッドセーフであることが保証されています。

この2つの方法は、シングルトンパターンを実現することができますが、具体的にどちらを選択するかは実際のニーズや好みによる。

bannerAds