A Global Singleton is a class of which only one instance exists within a program.

Any attempt to use non-static members of the class involves performing operations on this one instance.




package main
 
import (
    "log"
    "math/rand"
    "sync"
    "time"
)
 
var (
    instance string
    once     sync.Once // initialize instance with once.Do
)
 
func claim(color string, w *sync.WaitGroup) {
    time.Sleep(time.Duration(rand.Intn(1e8))) // hesitate up to .1 sec
    log.Println("trying to claim", color)
    once.Do(func() { instance = color })
    log.Printf("tried %s. instance: %s", color, instance)
    w.Done()
}
 
func main() {
    rand.Seed(time.Now().Unix())
    var w sync.WaitGroup
    w.Add(2)
    go claim("red", &w) // these two attempts run concurrently
    go claim("blue", &w)
    w.Wait()
    log.Println("after trying both, instance =", instance)
}