1
0
mirror of https://github.com/tmrts/go-patterns.git synced 2024-11-21 20:46:08 +03:00
go-patterns/creational/singleton.md

590 B

Singleton Pattern

Singleton creational design pattern restricts the instantiation of a type to a single object.

Implementation

package singleton

type singleton map[string]string

var (
    once sync.Once

    instance singleton
)

func New() singleton {
	once.Do(func() {
		instance = make(singleton)
	})

	return instance
}

Usage

s := singleton.New()

s["this"] = "that"

s2 := singleton.New()

fmt.Println("This is ", s2["this"])
// This is that

Rules of Thumb

  • Singleton pattern represents a global state and most of the time reduces testability.